Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 用for循环填充列表_For Loop_Elixir - Fatal编程技术网

For loop 用for循环填充列表

For loop 用for循环填充列表,for-loop,elixir,For Loop,Elixir,为什么我不能用这个简单的for循环来填充列表 new_data = [] for data <- old_data do new_data = List.insert_at(new_data, -1, data) end new_data=[] 对于Elixir中的数据,不能如中所述更改变量引用的值。因为在这个例子中,它不是一个“循环”,而是一个循环 您可以通过以下方式为理解结果赋值: new_data = for data <- old_data do data end

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

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

对于Elixir中的数据,不能如中所述更改变量引用的值。因为在这个例子中,它不是一个“循环”,而是一个循环

您可以通过以下方式为理解结果赋值:

new_data = for data <- old_data do
  data
end

new_data
变量是理解范围的局部变量。您可以使用以前的
新\u数据
值,但无法为外部范围重新绑定。这就是为什么在理解之后,
新数据仍然是
[]
。范围规则在

中解释,这很有趣。非常感谢。我知道变量是不可变的。但是我想如果我在重新绑定之前声明列表,谢谢!我花了太长的时间才弄明白。记住,在函数式编程中,一切都是表达式,这是明智的。正如@Gazler在下面指出的,您可以直接将理解的结果分配给一个值,这样您就不需要执行“将值初始化为空值,然后分配”模式。顺便说一下,这不是Erlang问题。我正在从中删除erlang标记。
new_data = List.insert_at(new_data, -1, data)