如何建立一个右关联中缀运算符?

时间:2013-03-13 12:01:11

标签: scala associative infix-notation

我有一个关联操作>>。问题是它的成本线性地取决于其左操作数的大小。因此,由n >>类似

a >> a >> a >> a >> a >> ... >> a 个应用程序序列形成的表达式
n

它在n方面具有二次成本,因为默认中缀运算符为left-associative。如何使它成为右关联,以便这种表达式的成本在{{1}}方面保持线性?

1 个答案:

答案 0 :(得分:48)

找到了解决方案。 Scala引用在 6.12.3中缀操作

中说明
  

运算符的关联性由运算符的最后一个字符决定。运营商   以冒号':'结尾是右关联的。所有其他运算符都是左关联的。

因此将>>重命名为>>:就足够了。

我花了一些时间才意识到,当a >> ba.>>(b)移除时,a >>: b被移植到b.>>:(a)中。所以我必须将>>:定义为

def >>:(x: T): T = x >> this