2011-08-09 62 views
4

我错过了哈斯克尔便捷的操作符$所以我决定引入一个。函数有什么类型?

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) 

它perfrectly工作了

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

但失败

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

我应该指定什么类型隐式转换为定义转换高清到Applayable实例?

+2

'公司_ $ 1'在你的第二个例子(与def) –

回答

7

你不能指定一个类型来做你想做的事:方法不是函数。您可以通过后追加神奇下划线,像这样的变换方法为(可能是部分应用)功能:

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

你需要通过追加“_”治疗INC方法的功能。这个作品:

inc _ $ 1 
相关问题