列表理解

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