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 Kernel.SpecialForms.case用法及代码示例
- Elixir Kernel.SpecialForms.%{}用法及代码示例
- Elixir Kernel.SpecialForms.for用法及代码示例
- Elixir Kernel.SpecialForms.quote用法及代码示例
- Elixir Kernel.SpecialForms.require用法及代码示例
- Elixir Kernel.SpecialForms.<<args>>用法及代码示例
- Elixir Kernel.SpecialForms.{args}用法及代码示例
- Elixir Kernel.SpecialForms.unquote_splicing用法及代码示例
- Elixir Kernel.SpecialForms.receive用法及代码示例
- Elixir Kernel.SpecialForms.%struct{}用法及代码示例
- Elixir Kernel.SpecialForms.import用法及代码示例
- Elixir Kernel.SpecialForms.left . right用法及代码示例
- Elixir Kernel.SpecialForms.alias用法及代码示例
- Elixir Kernel.SpecialForms.try用法及代码示例
- Elixir Kernel.SpecialForms.fn用法及代码示例
- Elixir Kernel.SpecialForms.cond用法及代码示例
- Elixir Kernel.SpecialForms.__aliases__用法及代码示例
- Elixir Kernel.SpecialForms.left :: right用法及代码示例
- Elixir Kernel.SpecialForms.unquote用法及代码示例
- Elixir Kernel.SpecialForms.with用法及代码示例
- Elixir Kernel.SpecialForms.__block__用法及代码示例
- Elixir Kernel.SpecialForms.^var用法及代码示例
- Elixir Kernel.round用法及代码示例
- Elixir Kernel.left / right用法及代码示例
- Elixir Kernel.put_in用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Kernel.SpecialForms.&expr。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。