2014-11-24 48 views
7
def adder(a:Int,b:Int):Int = {a+b} 
def doubler(a:Int):Int = {a*2} 
def doubleAdd = doubler _ compose adder 

功能I得到錯誤:發現類型不匹配 :(INT,INT)=>內部 要求:? => IntScala中,構圖時兩個值

然後,如果我只是嘗試doubleAdd = doubler(加法器_)我會得到相同的錯誤,除了需要Int而不是? => Int

有沒有用兩個參數編寫函數的方法?對不起,如果這是非常基本的,我是相當新的語言,我找不到任何地方有兩個參數的例子。

回答

6

您試圖用Function1組合Function2(加法器),因此是問題所在。一個解決辦法是你的加法器的定義更改爲咖喱版本:

def adder(a: Int)(b: Int):Int = a + b 

然後doubleAdd部分地應用加法器這樣的:

def doubleAdd(x: Int) = doubler _ compose adder(x) 

什麼是引擎蓋下發生從Function2 (Int, Int) => Int轉化加法器,以一個或返回一個函數的函數。然後,您可以編寫從加法器返回的函數,並且已經應用​​了第一個參數。

+0

謝謝,那幫了我很多 – Jim 2014-11-24 17:31:00