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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。