为什么Scala改变了关系运算符和相等运算符的相对优先级(与Java相比)?

Aiv*_*var 7 scala

在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))

你能提供一个优先顺序的例子吗?