我今天注意到了一些事情。 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
|
运算符是什么?它只是一个别名吗?
答案 0 :(得分:8)
与在Java中一样,单个&
和|
运算符与通常的版本执行相同的操作,但没有short-circuiting。
例如,考虑表达式true || isNice()
。永远不会调用该方法,因为true || x
始终为true且编译器(和运行时)知道这一点。如果您坚持要评估布尔表达式的所有部分,则必须使用&
或|
。
编辑:为了完整性,Scala还在模式匹配中使用|
替代模式。这是从语言参考中复制的:
8.1.11模式替代方案 句法: Pattern :: = Pattern1 {'|'Pattern1}
模式替代p1 | ...... | pn由许多替代模式组成 PI 。使用预期的模式类型对所有替代模式进行类型检查。 它们可能不会绑定除通配符之外的变量。替代模式匹配 如果至少有一个替代品与v匹配,则为值v。