当我手动将scala2代码转换为scala3时,dsl的操作符优先级发生了变化,我花了很长时间进行调试和修复。似乎是处理 :
是不同的:
extension (i1: Int) def ~>:(i2: Int) = i1 < i2
extension (i1: Int) def ~>(i2: Int) = i1 < i2
class Wrap(val i: Int):
def ~>:(w: Wrap) = i ~>: w.i
def ~>(w: Wrap) = i ~> w.i
// `Wrap` preserves `~>`
println(1 ~> 2) // true
println(Wrap(1) ~> Wrap(2)) // true
// `Wrap` does not preserve `~>:`
println(1 ~>: 2) // true
println(Wrap(1) ~>: Wrap(2)) // false
我的思维模式是:
对于以结尾的方法 :
,右边的是接受器
扩展方法只是方法:就像方法被添加到类中一样
我的思维模式似乎是错误的。解释发生了什么事的正确方法是什么?
链接会有所帮助,我检查了scala3文档,没有发现任何关于自定义操作符如何关联的信息。
更新
我试着添加 infix
前关键字 def
,但它不会更改本例中打印的内容。
暂无答案!
目前还没有任何答案,快来回答吧!