我有一个关联操作>>。问题是它的成本线性地取决于它的左操作数的大小。因此,由类似的一系列n应用形成的表达式>>
a >> a >> a >> a >> a >> ... >> a
它在 方面具有二次成本n,因为默认情况下中缀运算符是左关联的。如何使其具有右关联性,以使这种表达式的成本保持线性关系n?
我有一个关联操作>>。问题是它的成本线性地取决于它的左操作数的大小。因此,由类似的一系列n应用形成的表达式>>
a >> a >> a >> a >> a >> ... >> a
它在 方面具有二次成本n,因为默认情况下中缀运算符是左关联的。如何使其具有右关联性,以使这种表达式的成本保持线性关系n?
我找到了解决方案。Scala参考在第6.12.3 节中缀操作中说:
运算符的关联性由运算符的最后一个字符决定。以冒号 ':' 结尾的运算符是右结合的。所有其他运算符都是左结合的。
因此重命名>>为>>:.
我花了一些时间才意识到,虽然a >> b是脱糖成的a.>>(b),但a >>: b也是脱糖成的b.>>:(a)。所以我不得不定义>>:为
def >>:(x: T): T = x >> this