加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 19:22:11 所属栏目:安全 来源:网络整理
导读:在 Java中,优先级高于==.在Scala中,反之亦然.我想知道Scala人为什么选择这种方式?其他二元运算符优先级与Java对齐(exept按位运算,但可以理解为什么它们没有给出特殊优先级). 更新:这实际上是语言规范中的错误,’'实际上Scala中的优先级高于'=='. 解决方法
在 Java中,<优先级高于==.在Scala中,反之亦然.我想知道Scala人为什么选择这种方式?其他二元运算符优先级与Java对齐(exept按位运算,但可以理解为什么它们没有给出特殊优先级). 更新:这实际上是语言规范中的错误,’<'实际上Scala中的优先级高于'=='.

解决方法

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

val what = 5 == 8 < 4

我得到一个编译时警告:使用`==’比较类型Boolean和Int的值总是会产生错误;很明显,编译器已将其转换为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))

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读