def adder(a:Int,b:Int):Int = {a+b}
def doubler(a:Int):Int = {a*2}
def doubleAdd = doubler _ compose adder
Run Code Online (Sandbox Code Playgroud)
我收到错误:找到类型不匹配:(Int,Int)=> Int required:?=> Int
然后,如果我只是尝试doubleAdd = doubler(adder _)我得到相同的错误,除了需要Int而不是?=> Int
有没有办法用两个参数组成一个函数?对不起,如果这是非常基本的,我对这门语言很新,我找不到任何地方有两个参数的例子.
您正在尝试使用Function1编写Function2(加法器),因此存在问题.一种解决方法是将Adder的定义更改为curried版本:
def adder(a: Int)(b: Int):Int = a + b
Run Code Online (Sandbox Code Playgroud)
然后doubleAdd部分应用这样的加法器:
def doubleAdd(x: Int) = doubler _ compose adder(x)
Run Code Online (Sandbox Code Playgroud)
引擎盖下发生的事情是将加法器从a转换Function2 (Int, Int) => Int
为a Function1 (Int) => (Int) => Int
或返回函数的函数.然后,您可以使用已应用的第一个参数组合从adder返回的函数.