当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Kernel.SpecialForms.&expr用法及代码示例


Elixir语言中 Kernel.SpecialForms.&expr 相关用法介绍如下。

用法:

&expr
(宏)

捕获运算符。捕获或创建匿名函数。

捕获

捕获运算符最常用于从模块中捕获具有给定名称和数量的函数:

iex> fun = &Kernel.is_atom/1
iex> fun.(:atom)
true
iex> fun.("string")
false

在上面的示例中,我们将 Kernel.is_atom/1 捕获为匿名函数,然后调用它。

捕获操作符还可用于捕获本地函数,包括私有函数,以及通过省略模块名称导入的函数:

&local_function/1

另见 Function.capture/3

匿名函数

捕获运算符也可用于部分应用函数,其中 &1&2 等可用作值占位符。例如:

iex> double = &(&1 * 2)
iex> double.(2)
4

换句话说, &(&1 * 2) 等价于 fn x -> x * 2 end

我们可以使用占位符部分应用远程函数:

iex> take_five = &Enum.take(&1, 5)
iex> take_five.(1..10)
[1, 2, 3, 4, 5]

使用导入或本地函数时的另一个示例:

iex> first_elem = &elem(&1, 0)
iex> first_elem.({0, 1})
0

& 运算符可用于更复杂的表达式:

iex> fun = &(&1 + &2 + &3)
iex> fun.(1, 2, 3)
6

以及列表和元组:

iex> fun = &{&1, &2}
iex> fun.(1, 2)
{1, 2}

iex> fun = &[&1 | &2]
iex> fun.(1, [2, 3])
[1, 2, 3]

创建匿名函数的唯一限制是必须存在至少一个占位符,即它必须至少包含 &1 ,并且不支持块表达式:

# No placeholder, fails to compile.
&(:foo)

# Block expression, fails to compile.
&(&1; &2)

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Kernel.SpecialForms.&expr。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。