實施 Currying

閉包的一個應用是部分應用函式; 也就是說,現在提供一些引數並建立一個獲取剩餘引數的函式。 Currying 是部分應用的特定形式。

讓我們從簡單函式 curry(f, x) 開始,它將為函式提供第一個引數,並在以後期望其他引數。定義相當簡單:

curry(f, x) = (xs...) -> f(x, xs...)

我們再次使用匿名函式語法 ,這次結合可變引數語法。

我們可以使用這個 curry 函式以預設 (或無點)方式實現一些基本功能。

julia> const double = curry(*, 2)
(::#19) (generic function with 1 method)

julia> double(10)
20

julia> const simon_says = curry(println, "Simon: ")
(::#19) (generic function with 1 method)

julia> simon_says("How are you?")
Simon: How are you?

功能保持預期的程度:

julia> simon_says("I have ", 3, " arguments.")
Simon: I have 3 arguments.

julia> double([1, 2, 3])
3-element Array{Int64,1}:
 2
 4
 6