java - 这个构造是如何调用的,哪些语言支持它?

标签 java

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/

相关文章:

java - 类型提升和方法重载(多选)

java - 如何从 Windows API(Java 中)登录用户?

java - 如何删除 java 中模式的所有数据库对象?

java - 如何在Java中的Prepared Select语句中包含参数?

java - 将字符串加载到 JTable 列

java - 如何从 URL 下载多个文件作为一个 zip 文件

java - 用填充的数据库覆盖您的应用程序数据库

java - 调用重绘后 JButton 显示在错误的位置

Java 打印对象 按类型列出服务

java - 从界面读取注解值?