2010-10-12 124 views
16

因为像+,::, - >等正常运营商都是可以超载的方法,我想知道是否||和& &也是方法。如果这是布尔对象的方法,这在理论上可以工作。 但是,如果他们是,为什么有点像&&和||在斯卡拉

if (foo == bar && buz == fol) 

可能吗?如果编译器从右到左读取,则会调用& &而不是(foo == bar)

+0

'=='显然具有比'&&'更高的优先级。 – 2010-10-12 15:21:14

+0

那么如何定义优先级?这只在编译器中有效,还是有任何规则首先调用运算符 – mice 2010-10-12 15:23:43

+0

编译器确定。 – 2010-10-12 15:31:18

回答

28

6.12.3缀操作中缀运算符可以是任意 标识符。中缀运算符具有 优先级和结合定义 如下:

中缀运算符 的优先级是由操作者 的第一个字符来确定。字符 下面按递增顺序 以优先顺序列出, 相同行上的字符具有相同的优先级。

  • (所有字母)
  • |
  • ^
  • &
  • <>
  • =!
  • + -
  • * /%
  • (所有其他特殊字符)

也就是说,运营商开始与 信有优先级最低,其次是开始运营 与 '|'等

有一个例外 此规则,涉及赋值运算符 (§6.12.4)。分配运算符 的优先级与简单赋值(=)之一 相同。那 是,它低于任何其他运营商的优先级 。

下面是一个关联性的解释,以及它是如何在一个表达式中与多个操作符结合的。 Scala Reference可以很好的阅读。

0

这两个绝对是scala中的方法。