我有一个关联操作>>
。问题是它的成本线性取决于其左操作数的大小。所以由一系列组成的表达式n
的应用>>
like
a >> a >> a >> a >> a >> ... >> a
它的成本是二次方n
,因为默认情况下中缀运算符是左结合 https://en.wikipedia.org/wiki/Associative_property。如何使其右关联,以便该表达式的成本在以下方面保持线性n
?
我找到了解决方案。斯卡拉参考 https://www.scala-lang.org/files/archive/spec/2.12/06-expressions.html#prefix-infix-and-postfix-operations在一节中说6.12.3 中缀运算:
The 关联性运算符的最后一个字符决定。运营商
以冒号“:”结尾的是右关联的。所有其他运算符都是左结合的。
因此重命名就足够了>>
to >>:
.
我花了一些时间才意识到a >> b
脱糖成a.>>(b)
, a >>: b
脱糖成b.>>:(a)
。所以我必须定义>>:
as
def >>:(x: T): T = x >> this
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)