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 次 |
| 最近记录: |