匿名

匿名函数 属于 Elixir

4 个练习

关于 匿名函数

匿名函数在 Elixir 中经常单独使用,也用作返回值,或作为高阶函数(如Enum.map/2)的实参:

Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]

Elixir 中的函数被视为一等公民:

  • 具名函数和匿名函数都可以赋值给变量。
  • 具名函数和匿名函数都可以像数据一样,作为实参和返回值传来传去。
  • 匿名函数可以动态创建。

匿名函数用fn关键字创建,通过点号(.)调用:

function_variable = fn n -> n + 1 end

function_variable.(1)
# => 2

匿名函数也可以用&捕获简写创建。

  • 开头的&表示捕获表达式的开始。

  • &1、&2等指的是匿名函数的位置实参。

    # Instead of:
    fn x, y -> abs(x) + abs(y) end
    
    # We can write:
    &(abs(&1) + abs(&2))
    
  • &捕获运算符也可以用来_捕获_现有的具名函数:

    # Instead of:
    fn a, b -> a <= b end
    
    # We can capture the function using its name and arity:
    &<=/2
    

Elixir 中的匿名函数是闭包。它们可以访问定义函数时处于作用域内的变量。在匿名函数内部赋值的变量,在函数外部无法访问:

y = 2

square = fn ->
  x = 3
  x * y
end

square.()
# => 6

x
# => ** (CompileError): undefined function x/0
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 匿名函数

练习已锁定

再解锁 1 个练习即可练习 匿名函数