軌道
/
Elixir
Elixir
/
課程大綱
/
匿名函式
匿名

匿名函式 在 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 個練習,就能練習 匿名函式