在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?