功能有哪些类型?

时间:2011-08-09 20:15:23

标签: scala implicit-conversion

我错过了haskell方便的操作员$所以我决定介绍一个。

class Applayable[-R,T] (val host : Function[R,T]) {
  def $: R=>T = host.apply
}
implicit def mkApplayable[R,T] (k : Function[R,T]) : Applayable[R,T] = new Applayable(k)

它已经完全适用于

val inc : Int => Int = _ + 1
inc $ 1

失败
def inc(x:Int) : Int = x+1
inc $ 1

我应该为隐式转换指定什么类型来将 def 定义转换为Applayable实例?

2 个答案:

答案 0 :(得分:7)

您不能指定类型来执行您想要的操作:方法不是函数。您可以通过在其后附加神奇的下划线将方法转换为(可能部分应用的)函数,如下所示:

def inc(x:Int) : Int = x+1
(inc _) $ 1

答案 1 :(得分:3)

你需要通过附加'_'来将inc方法视为一个函数。这有效:

inc _ $ 1