【问题标题】:Why Scala changed relative precedence of relational vs equality operators (compared to Java)?为什么 Scala 改变了关系运算符和相等运算符的相对优先级(与 Java 相比)?
【发布时间】:2011-10-24 17:34:24
【问题描述】:

在 Java 中,

更新:这实际上是语言规范中的一个错误,'

【问题讨论】:

    标签: scala


    【解决方案1】:

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

    val what = 5 == 8 < 4
    

    我收到编译时警告:comparing values of types Boolean and Int using `==' will always yield false;所以很明显编译器已经把它翻译成5 == (8 &lt; 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 &lt;&lt;&lt; foo &gt;&gt;&gt; foo 会打印:

    <<<
    >>>
    ===
    

    这意味着它被解析为(foo === ((foo &lt;&lt;&lt; foo) &gt;&gt;&gt; foo))

    你能提供一个颠倒优先级的例子吗?

    【讨论】:

    • 那可能是打错了?...我不敢反驳参考,但是从这两个测试来看,以&lt;开头的方法在使用时优先级高于以=开头的方法中缀表示法(在 Scala 2.8.1 上)。
    • 感谢扩展示例——看来参考中确实存在拼写错误。我在比较不同语言的运算符优先级,这就是我注意到它的原因。
    • 文档在 2.8 中仍然存在错误,其中声称以“=”开头的中缀运算符的优先级高于以“
    • 在 2.11(或更早版本)修复 - scala-lang.org/files/archive/spec/2.11/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2017-10-13
    • 2023-02-09
    • 2017-06-09
    • 2017-10-26
    • 2014-12-05
    相关资源
    最近更新 更多