2016-11-24 174 views

回答

2

下面是一個例子:

val foo: Int => Int => Int = x => y => x + y 

功能foo具有Int => Int => Int的簽名,這意味着調用它的一些參數(什麼也被稱爲局部應用程序),它返回簽名Int => Int的另一功能:

val bar: Int => Int = foo(1) 

,您可以調用方式如下:

val result = bar(2) 
result == 3 
2

有人可以顯示和解釋一個函數,返回一個匿名方法/ lambda也是一個curried函數嗎?

其中一個簡單的方法,看看它是建立一個currried和方法:

def sum(x: Int): Int => Int = y => x + y 

,並稱之爲:

val curried: Int => Int = sum(1) 
println(curried(2)) // will yield 3 

如果你想變換方法的功能,您可以使用eta擴展:

val sumFunc: Int => Int => Int = sum _ 
println(sumFunc(1)(2)) 
+0

eta是什麼意思? –

+0

不知道ETA代表什麼,但這就是它的名字。谷歌eta擴展,關於這個問題的很多好博客文章。 –

+0

@coolbreezeη-expansion是一個Scala構建的將方法轉換爲函數的術語。最初它是在lambda微積分中定義的(一些細節在這裏:https://wiki.haskell.org/Eta_conversion)以及α,β以及毫不奇怪的λ。 –