Pet*_*lák 31 scala associative infix-notation
我有一个关联操作>>
.问题是它的成本线性地取决于其左操作数的大小.所以由一系列类似的n
应用程序形成的表达式>>
a >> a >> a >> a >> a >> ... >> a
Run Code Online (Sandbox Code Playgroud)
它具有二次成本n
,因为默认中缀运算符是左关联的.如何使它成为右关联,以便这样的表达式的成本保持线性n
?
Pet*_*lák 53
找到了解决方案.Scala引用在6.12.3中缀操作中说:
操作员的关联性由操作员的最后一个字符决定.以冒号':'结尾的运算符是右关联的.所有其他运算符都是左关联的.
因此,重命名>>
为>>:
.
我花了一些时间才意识到,虽然a >> b
已经堕入a.>>(b)
,但是a >>: b
被贬低了b.>>:(a)
.所以我不得不定义>>:
为
def >>:(x: T): T = x >> this
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6642 次 |
最近记录: |