Как получить свежую копию массива в каждой итерации? - PullRequest
0 голосов
/ 01 марта 2019

Я не могу понять следующее поведение

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

для каждого цикла моей функции aux var не инициализируется повторно.В самом деле, каждый сам по себе накапливает каждый идентификатор.

1 Ответ

0 голосов
/ 01 марта 2019

Если вы не присваиваете объект 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...