如何在每次迭代中获得数组的新副本?

时间:2019-03-01 19:25:09

标签: ruby-on-rails ruby loops

我无法理解以下行为

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

对于我的函数的每个循环,aux var不会重新初始化。确实,他自己中已经积累了每个ID。

1 个答案:

答案 0 :(得分:2)

除非您要分配new对象(或像[]这样的文字缩写之一),否则Ruby分配是通过引用进行的,请看:

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

如果要拥有该数组的副本,请使用.dup.clone方法:

aux = @taxon_ids.dup