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