2012-05-13 13 views
0

私は奇妙な動作に気付きました。この1つは期待通りに動作しますが :4、ルビーでの不思議な配列テスト

@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を繰り返しん:

@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 

どういうわけか、このコードを、「覚えている」古いアレイと声明「が」前のフィニッシュしようとします5?

2回目のテストでは、それぞれの要素ごとに実行していますが、なぜ古い文を終了しようとしているのですか?

+1

あなたはこのメソッドを再帰的に呼び出すためです。 –

+0

ちょうど気づいた。週末のコーディングの多くに、笑); –

答えて

3

同じ関数(test1)を2回呼び出すためです。