首页 > 解决方案 > 如何在每次迭代中获取数组的新副本?

问题描述

我无法理解以下行为

<% filter.each do |f| %>
   <% aux = @taxon_ids %>
   <%= check_box_tag "filter_taxon", aux << f[:id], @taxon_ids.include?(f[:id]) %>
   ...
<% end %>

对于我的函数的每个循环,auxvar 都没有重新初始化。事实上,他自己的每个身份都在积累。

标签: ruby-on-railsrubyloops

解决方案


除非您正在分配一个new对象(或文字简写之一,如[]),否则 Ruby 分配是通过引用进行的,请看:

[14] pry(main)> x = []          
=> []
[15] pry(main)> y = x           
=> []
[16] pry(main)> y << 1          
=> [1]
[17] pry(main)> x               
=> [1]

如果您想要该数组的自己的副本,请使用.dupor.clone方法:

aux = @taxon_ids.dup

推荐阅读