匿名函数

箭头语法

可以使用 -> 语法创建匿名函数。这对于将函数传递给高阶函数 (例如 map函数 )非常有用。下面的函数计算数组 A 中每个数字的平方。

squareall(A) = map(x -> x ^ 2, A)

使用此功能的一个示例:

julia> squareall(1:10)
10-element Array{Int64,1}:
   1
   4
   9
  16
  25
  36
  49
  64
  81
 100

多行语法

可以使用 function 语法创建多行匿名函数。例如,以下示例计算第一个 n 数字的阶乘 ,但使用匿名函数而不是内置的 factorial

julia> map(function (n)
               product = one(n)
               for i in 1:n
                   product *= i
               end
               product
           end, 1:10)
10-element Array{Int64,1}:
       1
       2
       6
      24
     120
     720
    5040
   40320
  362880
 3628800

阻止语法

因为将匿名函数作为函数的第一个参数传递是很常见的,所以有一个 do 块语法。语法

map(A) do x
    x ^ 2
end

相当于

map(x -> x ^ 2, A)

但前者在许多情况下可能更清晰,特别是如果在匿名函数中进行了大量计算。由于资源管理的原因,do 块语法对于文件输入和输出特别有用。