>>"); this } } def foo = new Foo 然后调用foo === foo >> foo打印这个: >> ==-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:20:55 26 4
gpt4 key购买 nike

在 Java 中,< 的优先级高于 ==。在 Scala 中,反之亦然。我想知道为什么 Scala 人会选择这种方式?其他二元运算符优先级与 Java 一致(除了按位运算,但可以理解为什么它们没有为这些运算符提供特殊优先级)。

更新:这实际上是语言规范中的一个错误,'<' 实际上比 Scala 中的'==' 具有更高的优先级。

最佳答案

它在 Scala 中没有反转。试试这个:

val what = 5 == 8 < 4

我收到一个编译时警告: 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

然后调用 foo === foo <<< foo >>> foo打印这个:
<<<
>>>
===

这意味着它被解析为 (foo === ((foo <<< foo) >>> foo))
你能提供一个优先级颠倒的例子吗?

关于scala - 为什么 Scala 改变了关系运算符和相等运算符的相对优先级(与 Java 相比)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7022207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com