我试图理解,灵修是如何运作的。请考虑以下代码段。
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的所有元素,对吧?
答案 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]