2012-05-13 93 views
0

我注意到奇怪的行爲。 雖然這一個運行正常:奇怪的紅寶石陣列測試

@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 

不知何故,此代碼,「記住」舊陣列,並試圖完成之前的「如果」聲明:

@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)。