在Scala中将操作符定义为方法别名的最简短符号是什么?

鉴于下面的通用register方法,我想定义:=运算符作为符号别名。

def register[Prop <: Property[_]](prop: Prop): Prop

@inline
final def :=[Prop <: Property[_]] = register[Prop] _

本来我想写这样的东西:

val := = register _

但是那给了我函数签名Nothing => Nothing 。 我的下一个尝试是使用类型Prop对它进行参数化,但只有当我将它设为def ,它才会起作用,它可以接受类型参数并将它们传递给它。

理想情况下,我想省略@inline注释,但我不确定Scala编译器@inline什么对象代码。

最重要的是我的目标是不要让:=方法复制register方法签名的所有部分(名称除外),然后让前一个委托给后者。


def :=[Prop <: Property[_]](prop: Prop) = register(prop)

应该管用。


我不认为有什么方法可以像Scala那样在Scala中实现你的目标(基本上Ruby是什么alias )。 autoproxy插件试图解决这类问题,但由于编译器插件中生成代码的各种问题,它还没有准备好用于生产环境。


你可以这样做:

def := : Prop => Prop = register

所以基本上在这里你定义了一个类型(Prop => Prop)的函数,它只是引用另一个函数。

链接地址: http://www.djcxy.com/p/56259.html

上一篇: What is the shortest notation to define an operator as a method alias in Scala?

下一篇: OpenMPI Reduce using MINLOC