为什么我不能用这个简单的for循环填充列表?
new_data = []
for data <- old_data do
new_data = List.insert_at(new_data, -1, data)
end
在此操作之后,我的new_data
列表仍为空,即使循环执行了N次。
答案 0 :(得分:20)
在Elixir中,您无法改变变量引用的值,如Are Elixir variables really immutable?中所述。因为在这个例子中不是“循环”,它是list comprehension。
您可以使用以下内容分配理解结果:
new_data = for data <- old_data do
data
end
在你的行中:
new_data = List.insert_at(new_data, -1, data)
new_data
变量是理解范围的本地变量。您可以使用以前的new_data
值,但无法重新绑定外部范围。这就是为什么new_data
在你理解之后仍然是[]
的原因。范围规则在http://elixir-lang.readthedocs.org/en/latest/technical/scoping.html