ruby-on-rails - 如何在每次迭代中获取数组的新副本?
问题描述
我无法理解以下行为
<% filter.each do |f| %>
<% aux = @taxon_ids %>
<%= check_box_tag "filter_taxon", aux << f[:id], @taxon_ids.include?(f[:id]) %>
...
<% end %>
对于我的函数的每个循环,aux
var 都没有重新初始化。事实上,他自己的每个身份都在积累。
解决方案
除非您正在分配一个new
对象(或文字简写之一,如[]
),否则 Ruby 分配是通过引用进行的,请看:
[14] pry(main)> x = []
=> []
[15] pry(main)> y = x
=> []
[16] pry(main)> y << 1
=> [1]
[17] pry(main)> x
=> [1]
如果您想要该数组的自己的副本,请使用.dup
or.clone
方法:
aux = @taxon_ids.dup
推荐阅读
- javascript - 为什么我的数组在我的循环中不起作用
- python - 我有一个熊猫数据框,其中一列包含文本。我想获取出现在整列的每一行中的唯一单词列表
- android - 如果 Android 重新启动我的应用程序,我如何确保它不会加载最新的片段?
- c - 在 C 中实现类
- macos - macOS 如何为进程分配堆栈和堆?
- reactjs - 获取后无法访问状态数组
- java - 仅使用不带 ArrayList 的 Random 写入不重复的随机数
- java - 运行这个 java 游戏循环代码来渲染图形正在扼杀性能
- docker - 为什么 docker system prune 没有删除悬空图像,而 docker rmi $(docker images --filter "dangling=true" -q --no-trunc) 没有
- c# - 仅用于一个控制器的 Web API 缓存 DLL 和符号文件