列表理解
Elixir 沒有迴圈。它們不是列表,而是有很多 Enum
和 List
模組,但也有 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
之後和do
或into
符號之前,guard
語句必須先排序。符號順序無關緊要
根據這些約束,列表理解僅限於簡單使用。在更高階的情況下,使用 Enum
和 List
模組的功能將是最好的主意。