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++ 不支持它?)