为什么scala 3扩展方法和常规方法的运算符关联性工作方式不同?

mpbci0fu  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(252)

当我手动将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 ,但它不会更改本例中打印的内容。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题