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

时间:2011-11-20 23:04:17

标签: scala methods operators alias

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

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

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

最初我想写这样的东西:

val := = register _

但是这给了我函数签名Nothing => Nothing。我的下一次尝试是使用类型Prop对其进行参数化,但这显然只有在我将其设为def时才有用,它可以采用类型参数并将其传递给它们。

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

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

3 个答案:

答案 0 :(得分:2)

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

应该有用。

答案 1 :(得分:1)

我不相信有任何方法可以实现您现在所处的内容(基本上是alias在Ruby中为您提供的内容)。 autoproxy plugin试图解决这类问题,但由于在编译器插件中生成代码的各种问题,它尚未准备好用于生产。

答案 2 :(得分:1)

你可以这样做:

def := : Prop => Prop = register

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

相关问题