在Java中,<具有比==更高的优先级.在Scala中,反之亦然.我想知道Scala人为什么选择这种方式?其他二元运算符优先级与Java对齐(exept按位运算,但可以理解为什么它们没有给出特殊的优先级).
更新:这实际上是语言规范中的一个错误,'<'实际上比Scala中的'=='更高优先级.
Jea*_*let 14
它在Scala中没有反转.试试这个:
val what = 5 == 8 < 4
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时警告:comparing values of types Boolean and Int using `==' will always yield false; 很明显,编译器已将其翻译为5 == (8 < 4),就像在Java中一样.
你也可以试试这个:
class Foo {
def ===(o: Foo) = { println("==="); this }
def <<<(o: Foo) = { println("<<<"); this }
def >>>(o: Foo) = { println(">>>"); this }
}
def foo = new Foo
Run Code Online (Sandbox Code Playgroud)
然后调用foo === foo <<< foo >>> foo打印:
<<<
>>>
===
Run Code Online (Sandbox Code Playgroud)
这意味着它被解析为 (foo === ((foo <<< foo) >>> foo))
你能提供一个优先顺序的例子吗?