Scala 语法规范不匹配 if-else 与以分号结尾的一行表达式?
Scala Syntax Specification mismatch if-else with one line expression end by semicolon?
我正在学习Scala Syntax Specification。
对 if-else
语法感到困惑:
Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr]
| ...
如何匹配下面的 if-else 以分号结尾的一行表达式?
if (true) // \n
println(1); //\n
else //\n
println(2); //\n
注意有 4 行,每行后跟一个 '\n'
。我有这些问题:
- 当
println(1)
之后的第一个;
匹配else
([[semi] ‘else’ Expr]
之前的semi
时,如何匹配之后的第二个'\n'
;
在 println(1)
之后 ?
- 如何匹配
else
之后的第3个'\n'
?
- 如何匹配
println(2)
之后的第2个;
和第4个'\n'
?由于 if-else
不匹配尾部的任何 ;
或 '\n'
。
在 Scala 中,semicolon ;
不存在(被忽略)
if-else 语句很简单,加上括号:
if (true) {
"\n" // this will be returned
println(1) // this will be ignored
"\n" // this will be ignored
} else {
"\n" // this will be returned
println(2) // this will be ignored
"\n" // this will be ignored
}
或者,不用accolades也可以,但是声明必须写在一行中:
if (true)
"\n" // this will be returned, can not have another line here
else
"\n"
无评论:if (true) "\n" else "\n"
我认为您认为所有换行符都必须匹配 nl
标记,这让您感到困惑。这是不正确的。
换行符 通常 仅被视为空格。在 Lexical Syntax 章节 section 1.2 Newline characters 中有一个关于换行符的很长的小节,它详细解释了何时 确切地 ,换行符是一个 nl
标记以及何时不是。
您的示例中只有第一个换行符是 nl
标记,其他三个只是空格。
我正在学习Scala Syntax Specification。
对 if-else
语法感到困惑:
Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr]
| ...
如何匹配下面的 if-else 以分号结尾的一行表达式?
if (true) // \n
println(1); //\n
else //\n
println(2); //\n
注意有 4 行,每行后跟一个 '\n'
。我有这些问题:
- 当
println(1)
之后的第一个;
匹配else
([[semi] ‘else’ Expr]
之前的semi
时,如何匹配之后的第二个'\n'
;
在println(1)
之后 ? - 如何匹配
else
之后的第3个'\n'
? - 如何匹配
println(2)
之后的第2个;
和第4个'\n'
?由于if-else
不匹配尾部的任何;
或'\n'
。
在 Scala 中,semicolon ;
不存在(被忽略)
if-else 语句很简单,加上括号:
if (true) {
"\n" // this will be returned
println(1) // this will be ignored
"\n" // this will be ignored
} else {
"\n" // this will be returned
println(2) // this will be ignored
"\n" // this will be ignored
}
或者,不用accolades也可以,但是声明必须写在一行中:
if (true)
"\n" // this will be returned, can not have another line here
else
"\n"
无评论:if (true) "\n" else "\n"
我认为您认为所有换行符都必须匹配 nl
标记,这让您感到困惑。这是不正确的。
换行符 通常 仅被视为空格。在 Lexical Syntax 章节 section 1.2 Newline characters 中有一个关于换行符的很长的小节,它详细解释了何时 确切地 ,换行符是一个 nl
标记以及何时不是。
您的示例中只有第一个换行符是 nl
标记,其他三个只是空格。