當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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