使用for循环填充List

时间:2015-11-20 15:45:53

标签: for-loop elixir

为什么我不能用这个简单的for循环填充列表?

new_data = []
for data <- old_data do
  new_data = List.insert_at(new_data, -1, data)
end

在此操作之后,我的new_data列表仍为空,即使循环执行了N次。

1 个答案:

答案 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

中解释