斯卡拉的||和|运营商

时间:2015-01-24 23:14:19

标签: scala if-statement

我今天注意到了一些事情。 Scala具有通常的OR ||,但也包含|

我的第一个想法是|是一个严格的OR。因此,true | true将评估为false。 但是,

val x = true
x: Boolean = true
val y = true
y: Boolean = true
x || y
res4: Boolean = true
x | y
res5: Boolean = true

|运算符是什么?它只是一个别名吗?

1 个答案:

答案 0 :(得分:8)

与在Java中一样,单个&|运算符与通常的版本执行相同的操作,但没有short-circuiting

例如,考虑表达式true || isNice()。永远不会调用该方法,因为true || x始终为true且编译器(和运行时)知道这一点。如果您坚持要评估布尔表达式的所有部分,则必须使用&|

编辑:为了完整性,Scala还在模式匹配中使用|替代模式。这是从语言参考中复制的:

  

8.1.11模式替代方案   句法:   Pattern :: = Pattern1 {'|'Pattern1}

     

模式替代p1 | ...... | pn由许多替代模式组成   PI   。使用预期的模式类型对所有替代模式进行类型检查。   它们可能不会绑定除通配符之外的变量。替代模式匹配   如果至少有一个替代品与v匹配,则为值v。