Java 不支持这种结构:
if ((int ext_pos = fname.lastIndexOf('.')) >= 0)
fname = fname.substring(0,ext_pos);
(编译时出现语法错误)
然而,其他一些语言支持类似的东西,例如,在 Perl 中我可以写
if (defined (my $foo = $bar{$baz})) { ... do stuff with $bar ... }
# $bar does not exist here
显然,这更多的是语法糖,因为可以用 Java 将其重写为
{
int ext_pos = fname.lastIndexOf('.');
if (ext_pos >= 0)
fname = fname.substring(0,ext_pos);
}
以增加 3 行代码为代价。
如何调用这个构造?
(奖金问题:哪些语言支持它?为什么 Java 和 C++ 不支持它?)
最佳答案
您必须将声明移到 if 语句条件之外。声明是语句,不能用作表达式
int ext_pos;
if ((ext_pos = fname.lastIndexOf('.')) >= 0)
fname = fname.substring(0,ext_pos);
在您指出的某些语言 (Perl) 中,您可以做到这一点。这是因为这些语言中的赋值也可以被视为一个表达式,并因此嵌套在其他表达式中。
(我不确定这个结构叫什么)
关于java - 这个构造是如何调用的,哪些语言支持它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17349232/