在红宝石中进行奇怪的阵列测试

时间:2012-05-13 15:45:04

标签: ruby arrays each

我注意到了奇怪的行为。 虽然这个按预期运行:

@a = ['0','1','2','3','4','5']
def test2
  @a[0..2].each do |i|
    puts 'I am at: ' +i.to_s
    if i == '2'
      puts 'I am removing 2'
      @a.delete(i)
      licz
    end
  end
end


I am at: 0
I am at: 1
I am at: 2
I am removing 2
I am at: 0
I am at: 1
I am at: 3

不知何故,这段代码'记住'旧数组并尝试完成之前的'if'语句:

@a = ['0','1','2','3','4','5']
def test1
  @a.each do |i|
    puts 'I am at: ' +i.to_s
    if i == '2'
      puts 'I am removing 2'
      @a.delete(i)
      test1
    end
  end
end
    I am at: 0
    I am at: 1
    I am at: 2
    I am removing 2
    I am at: 0
    I am at: 1
    I am at: 3
    I am at: 4
    I am at: 5
    I am at: 4
    I am at: 5
    => ["0", "1", "3", "4", "5"]

为什么重复4 5,4 5?

我知道在第二次测试中,我在每个元素上运行每个元素,但为什么它会尝试完成旧语句?

1 个答案:

答案 0 :(得分:3)

因为你两次调用相同的函数(test1)。