斯卡拉的|| 和| 运营商

Ant*_*ton -4 if-statement scala

我今天注意到了一些事 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
Run Code Online (Sandbox Code Playgroud)

什么是|运营商?它只是一个别名吗?

Dav*_*ave 8

与在Java中一样,单个&|运算符与它们的通常版本做同样的事情,但没有短路.

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

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

8.1.11模式替代语法:Pattern :: = Pattern1 {'|' Pattern1}

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