基本上就是标题。通过Java BNF,我可以看到“无短if”,如:
<statement no short if> ::= <statement without trailing substatement> | <labeled statement no short if> | <if then else statement no short if> | <while statement no short if> | <for statement no short if>“不短”是什么意思?我看到"NoShortIf“出现在我的演讲幻灯片中,没有解释它的意思。
发布于 2016-03-17 00:38:41
答案出现在上面@ answer的评论中提供的链接中:
因此,语句在语法上分为两类:可能以没有其他子句的if语句结尾的语句(“简短的if语句”)和绝对没有的语句。 只有那些肯定不会以简短的if语句结尾的语句,才可能在包含Only子句的if语句中,在关键字Only之前显示为立即子语句。 这个简单的规则可以防止“悬空的其他”问题。带有"no short if“限制的语句的执行行为与相同类型语句的执行行为相同,而没有"no short if”限制;区分纯粹是为了解决语法上的困难。
发布于 2019-02-09 20:41:48
“短if”是一个if语句,而不包含其他语句。
在某些情况下,不允许使用“短if”来消除歧义。
以下是有效的Java。没有“简短的假设”,也没有含糊不清的地方。
boolean flag = false;
if (x > 0)
if (x > 10)
flag = true;
else
flag = false;
else
flag = true;下面的代码也是有效的java代码,但是没有“简短的if”规则,如果其他代码属于哪种规则,就会产生歧义。
if (x > 0) if (x < 10) flag = true; else flag = false;以下Java语言规则
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement意味着上述代码的含义是
if (x > 0)
if (x < 10)
flag = true;
else
flag = false;也就是说,inner属于内部if语句。
让我们用Java进行测试,以确保
static Boolean shorty (int x) {
Boolean flag = null;
if (x > 0) if (x < 10) flag = true; else flag = false;
return flag;
}
public static void main(String[] args) {
System.out.println(shorty(-1));
System.out.println(shorty(5));
System.out.println(shorty(20));
}输出是
null
true
falsehttps://stackoverflow.com/questions/36048981
复制相似问题