scala的柯里化(curry)糾結了很久。通過Scala Worksheet 可以列印很多調試信息,所以用它寫了一些測試代碼,幫助自己理解。 ...
scala的加里化(currying)糾結了很久。通過Scala Worksheet 可以列印很多調試信息,所以用它寫了一些測試代碼,幫助自己理解。
object test { //一個參數列表,3個參數 def sum(a: Int, b: Int, c: Int) = a + b + c //> sum: (a: Int, b: Int, c: Int)Int //將一個參數列表,拆分成三個參數列表 def sum4(a: Int)(b: Int)(c: Int) = a + b + c //> sum4: (a: Int)(b: Int)(c: Int)Int //sum4的偏應用函數 val fn4 = sum4 _ //> fn4 : Int => (Int => (Int => Int)) = <function1> //根據偏應用函數,便可定義出如下函數: def sum44(a: Int) = { (b: Int) => { (c: Int) => { a + b + c } } } //> sum44: (a: Int)Int => (Int => Int) //自定義函數的偏應用函數 val fn44 = sum44 _ //> fn44 : Int => (Int => (Int => Int)) = <function1> sum(1, 2, 3) //> res0: Int = 6 sum4(1)(2)(3) //> res1: Int = 6 sum44(1)(2)(3) //> res2: Int = 6 //將2,3分別偏應用到第一個,第二個參數上 val fn44_2 = sum44(2)(3)(_:Int) //> fn44_2 : Int => Int = <function1> fn44_2(4) //> res3: Int = 9 fn44_2.apply(4) //> res4: Int = 9 }
- 偏函數應用是找一個函數,固定其中的幾個參數值,從而得到一個新的函數。
- 函數加里化是一種使用匿名單參數函數來實現多參數函數的方法。
- 函數加里化能夠讓你輕鬆的實現某些偏函數應用。
參考:
閉包的定義 https://en.wikipedia.org/wiki/Closure_(computer_programming)
加里化的定義 https://en.wikipedia.org/wiki/Currying