运算符的奇怪优先级>> =和>>

时间:2014-12-08 13:11:50

标签: scala

有:

case class A(x: Int) {
  def >>= (y: A) = A(x * y.x)
  def >> (y: A) = A(x + y.x)
}

由于>>=>>都以>开头,因此它们应具有相同的优先级和左关联性。

然而:

A(5) >>= A(3) >> A(2)

返回25。

但是应该返回17,因为:

A(5) >>= A(3) >> A(2) == (A(5) >>= A(3)) >> A(2) == 17

看起来Scala编译器将parantheses放在错误的位置。

错误?

1 个答案:

答案 0 :(得分:7)

正如this comment所解释的那样:以=结尾但不以1开头的运算符被认为是赋值运算符。他们的优先级最低。 +=*=等运营商需要此规则。