列表理解
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
模块的功能将是最好的主意。