Scala,用两个值组合函数

Scala,用两个值组合函数,scala,Scala,我得到一个错误:类型不匹配 发现:(Int,Int)=>Int 必需:?=>Int 然后,如果我只是尝试doubleAdd=doubler(加法器),我会得到相同的错误,除了必需的Int而不是?=>Int 有没有办法用两个参数组成一个函数?很抱歉,如果这是非常基本的,我对该语言非常陌生,我在任何地方都找不到具有两个参数的示例。您试图用Function1组合Function2(加法器),因此出现了问题。一种解决方法是将加法器的定义更改为通用版本: def adder(a:Int,b:Int):In

我得到一个错误:类型不匹配 发现:(Int,Int)=>Int 必需:?=>Int

然后,如果我只是尝试doubleAdd=doubler(加法器),我会得到相同的错误,除了必需的Int而不是?=>Int


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

您试图用Function1组合Function2(加法器),因此出现了问题。一种解决方法是将加法器的定义更改为通用版本:

def adder(a:Int,b:Int):Int = {a+b}
def doubler(a:Int):Int = {a*2}
def doubleAdd = doubler _ compose adder
然后doubleAdd以部分应用加法器,如下所示:

def adder(a: Int)(b: Int):Int = a + b
引擎盖下发生的事情是将加法器从
Function2(Int,Int)=>Int
,转换为
Function1(Int)=>(Int)=>Int
,或返回函数的函数。然后,您就可以使用已经应用的第一个参数组合从加法器返回的函数

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