列表理解

Elixir 沒有迴圈。它們不是列表,而是有很多 EnumList 模組,但也有 List Comprehensions。

列表理解可用於:

  • 建立新列表
iex(1)> for value <- [1, 2, 3], do: value + 1
[2, 3, 4] 
  • 過濾列表,使用 guard 表示式,但你使用它們沒有 when 關鍵字。
iex(2)> odd? = fn x -> rem(x, 2) == 1 end
iex(3)> for value <- [1, 2, 3], odd?.(value), do: value
[1, 3]
  • 使用 into 關鍵字建立自定義地圖:
iex(4)> for value <- [1, 2, 3], into: %{}, do: {value, value + 1}
%{1 => 2, 2=>3, 3 => 4}

合併的例子

iex(5)> for value <- [1, 2, 3], odd?.(value), into: %{}, do: {value, value * value}
%{1 => 1, 3 => 9}

摘要

列表理解:

  • 在返回除列表之外的其他結構時,使用逗號和 into 關鍵字後使用 for..do 語法和附加防護。地圖。
  • 在其他情況下返回新列表
  • 不支援累加器
  • 在滿足某些條件時無法停止處理
  • for 之後和 dointo 符號之前,guard 語句必須先排序。符號順序無關緊要

根據這些約束,列表理解僅限於簡單使用。在更高階的情況下,使用 EnumList 模組的功能將是最好的主意。