Scala中if-else表达式作为左操作数的运算优先级疑问
问题解析:Scala中if-else与后续操作的执行差异
这是Scala的运算符优先级规则导致的,和花括号无关,本质是编译器对表达式的解析顺序不同。
核心原因:运算符优先级高于条件表达式
Scala里算术运算符(比如+)的优先级比if-else条件表达式更高,所以你写的代码会被编译器按照优先级重新解析:
对于代码
if (true) { 1 } else { 2 } + 3
编译器实际解析为:if (true) { 1 } else { 2 + 3 }- 当条件为
true时,直接进入第一个分支返回1,完全不会触发else分支的计算,所以结果是1; - 当条件为
false时,进入else分支,此时2 + 3已经被优先计算,所以返回5。
- 当条件为
加括号后的代码
(if (true) { 1 } else { 2 }) + 3
括号强制改变了表达式的计算顺序:先完整执行if-else表达式得到结果1,再和3做加法,最终得到4,这符合预期。
补充说明
花括号的作用只是包裹代码块,并不会改变运算符的优先级。哪怕你给2单独加花括号,编译器依然会优先把2和+3结合,再放到else的代码块中,所以看起来像是花括号被忽略了,但本质是优先级规则在起作用。
内容的提问来源于stack exchange,提问作者Malichan
相关产品推荐
相关产品推荐

