理解如何运作

时间:2016-03-16 09:48:31

标签: elixir

我试图理解,灵修是如何运作的。请考虑以下代码段。

iex> for i <- [:a, :b, :c], j <- [1, 2], do:  {i, j}
[a: 1, a: 2, b: 1, b: 2, c: 1, c: 2]

它是如何工作的?它从上到下循环,就像它从i中首先拾取一个元素然后循环遍历j的所有元素,对吧?

1 个答案:

答案 0 :(得分:3)

关于执行顺序,它相当于两个嵌套循环。但是,嵌套循环将生成嵌套列表。

for i <- [:a, :b, :c] do
  for j <- [1, 2] do
    {i, j}
  end
end

#=> [[a: 1, a: 2], [b: 1, b: 2], [c: 1, c: 2]]

为了更好地复制原始示例,除了最里面的循环外,我们可以使用Enum.flat_map/2来生成相同的结果。

Enum.flat_map [:a, :b, :c], fn(i) ->
  Enum.map [1, 2], fn(j) ->
    {i, j}
  end
end

#=> [a: 1, a: 2, b: 1, b: 2, c: 1, c: 2]