我有一个关联操作>>
。 问题是,它的成本线性依赖于它的左操作数的大小。 因此,一个表达的序列形成n
应用>>
像
a >> a >> a >> a >> a >> ... >> a
它来讲二次成本n
,因为默认情况下缀运算符左结合 。 如何使它向右关联,使这样的表达的成本保持在直线状态来讲n
?
我有一个关联操作>>
。 问题是,它的成本线性依赖于它的左操作数的大小。 因此,一个表达的序列形成n
应用>>
像
a >> a >> a >> a >> a >> ... >> a
它来讲二次成本n
,因为默认情况下缀运算符左结合 。 如何使它向右关联,使这样的表达的成本保持在直线状态来讲n
?
一个找到了解决办法。 斯卡拉参考说,在6.12.3中缀操作 :
运营商的关联是通过运营商的最后一个字符来确定。 在一个冒号结束符“:”是右结合。 所有其他运营商都是左结合。
因此,它是足够重命名>>
到>>:
我花了一些时间来实现,虽然a >> b
被脱到a.>>(b)
a >>: b
被脱到b.>>:(a)
。 因此,我不得不定义>>:
作为
def >>:(x: T): T = x >> this