36

我有一个关联操作>>。问题是它的成本线性地取决于它的左操作数的大小。因此,由类似的一系列n应用形成的表达式>>

a >> a >> a >> a >> a >> ... >> a

它在 方面具有二次成本n,因为默认情况下中缀运算符是左关联的。如何使其具有右关联性,以使这种表达式的成本保持线性关系n

4

1 回答 1

62

我找到了解决方案。Scala参考在第6.12.3 节中缀操作中说:

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

因此重命名>>>>:.

我花了一些时间才意识到,虽然a >> b是脱糖成的a.>>(b),但a >>: b也是脱糖成的b.>>:(a)。所以我不得不定义>>:

def >>:(x: T): T = x >> this
于 2013-03-13T12:01:10.627 回答