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