實施 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