鉴于下面的通用register
方法,我想将:=
运算符定义为符号别名。
def register[Prop <: Property[_]](prop: Prop): Prop
@inline
final def :=[Prop <: Property[_]] = register[Prop] _
最初我想写这样的东西:
val := = register _
但是这给了我函数签名Nothing => Nothing
。我的下一次尝试是使用类型Prop
对其进行参数化,但这显然只有在我将其设为def
时才有用,它可以采用类型参数并将其传递给它们。
理想情况下,我想省略@inline
注释,但我不确定Scala编译器使用什么目标代码。
最重要我的目标是不让:=
方法复制register
方法签名的所有部分,除了名称,然后让前者委托给后者。
答案 0 :(得分:2)
def :=[Prop <: Property[_]](prop: Prop) = register(prop)
应该有用。
答案 1 :(得分:1)
我不相信有任何方法可以实现您现在所处的内容(基本上是alias
在Ruby中为您提供的内容)。 autoproxy plugin试图解决这类问题,但由于在编译器插件中生成代码的各种问题,它尚未准备好用于生产。
答案 2 :(得分:1)
你可以这样做:
def := : Prop => Prop = register
所以基本上你在这里定义一个类型(Prop =&gt; Prop)的函数,它只引用另一个函数。