我的理解是,地图实现了收集器协议,因此可以在理解的
into:
部分中使用。为了尝试这个,我编写了以下程序:
lt = [{"ab", "cd", "ef"}, {"x", "y", "z"}]
m = %{}
for c <- lt, into: m do
IO.puts(length(Map.keys(m)))
{elem(c,1),elem(c,0)}
end
IO.puts(length(Map.keys(m)))
我预计
m
最后设置为%{"cd" => "ab", "y" => "x"}
并看到
0
1
2
正在打印,但我打印了三遍
0
。地图里好像什么都没有收集到m
。为什么?
您忘记了变量是不可变的:您需要使用并保留
for
返回的值,m
将保持为空 map
。
lt = [{"ab", "cd", "ef"}, {"x", "y", "z"}]
m = %{}
output =
for c <- lt, into: m do
{elem(c, 1), elem(c, 0)}
end
IO.puts(length(Map.keys(output)))