Scala,使用两个值组合函数

时间:2014-11-24 17:07:40

标签: scala

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

有没有办法用两个参数组成一个函数?很抱歉,如果这是非常基本的,我对这门语言很陌生,我无法在任何地方找到一个带有两个参数的示例。

1 个答案:

答案 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,或者是一个返回函数的函数。然后,您可以使用已应用的第一个参数组合从加法器返回的函数。