Ruby中的操作顺序

时间:2017-02-15 20:39:34

标签: ruby sequence

执行我的代码我遇到了一些我不太了解的困难(我在Ruby中很新)。这是一个例子

temp = []
temp_groups_data = []
search_text_user = %r{AD-|Domain}
groups_data.each do |arr|
  temp_groups_data << arr
  arr.delete_at(0)
  arr.each do |el|
    temp << (el) unless el =~ search_text_user
  end
end

当我尝试在代码的下一部分使用temp_groups_data数组时,我得到一个删除值为0的数组。我不明白为什么因为这个数组是在检测项目之前创建的,所以值shuold在其中,为什么不呢? Ruby中的操作顺序是什么?如何复制该数组并使其在下一部分代码中有用?

1 个答案:

答案 0 :(得分:1)

arr中的temp_group_dataarr上的delete_at(0)相同的数组。这是以多种不同方式访问的相同数据。

以下是正在发生的事情的简化示例:

x = []
y = [:a, :b]
x << y
p x #=> [[:a, :b]]
y.delete_at(0)
p x #=> [[:b]]

最简单的改变就是在将arr放入temp_groups_data

之前复制temp = [] temp_groups_data = [] search_text_user = %r{AD-|Domain} groups_data.each do |arr| temp_groups_data << arr.dup # this right here arr.delete_at(0) arr.each do |el| temp << (el) unless el =~ search_text_user end end
{{1}}