2011-08-09 107 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 
相關問題