作为参数的函数

函数是 Julia 中的对象。与任何其他对象一样,它们可以作为参数传递给其他函数。接受函数的函数称为高阶函数。

例如,我们可以通过将函数 f 作为第一个参数来实现标准库的 foreach 函数的等价物。

function myforeach(f, xs)
    for x in xs
        f(x)
    end
end

我们可以测试这个函数确实像我们期望的那样工作:

julia> myforeach(println, ["a", "b", "c"])
a
b
c

通过将函数作为第一个参数,而不是后面的参数,我们可以使用 Julia 的 do 块语法。do 块语法只是将匿名函数作为函数的第一个参数传递的便捷方式。

julia> myforeach([1, 2, 3]) do x
           println(x^x)
       end
1
4
27

我们上面的 myforeach 的实现大致相当于内置的 foreach 功能。还存在许多其他内置的高阶函数。

高阶函数非常强大。有时,在处理高阶函数时,正在执行的操作变得不重要,程序可能变得非常抽象。组合器是高度抽象的高阶函数系统的示例。