def adder(a:Int,b:Int):Int = {a+b}
def doubler(a:Int):Int = {a*2}
def doubleAdd = doubler _ compose adder
我收到错误:类型不匹配 发现:(Int,Int)=> Int 要求:? => INT
然后如果我只是尝试doubleAdd = doubler(adder _)我会得到相同的错误,除了需要Int而不是? => INT
有没有办法用两个参数组成一个函数?很抱歉,如果这是非常基本的,我对这门语言很陌生,我无法在任何地方找到一个带有两个参数的示例。
答案 0 :(得分:6)
您正在尝试使用Function1编写Function2(加法器),因此出现问题。一种解决方法是将Adder的定义更改为curried版本:
def adder(a: Int)(b: Int):Int = a + b
然后doubleAdd部分应用这样的加法器:
def doubleAdd(x: Int) = doubler _ compose adder(x)
幕后发生的事情是将加法器从Function2 (Int, Int) => Int
转换为Function1 (Int) => (Int) => Int
,或者是一个返回函数的函数。然后,您可以使用已应用的第一个参数组合从加法器返回的函数。