2012-05-13 3 views
0

나는 이상한 행동을 느꼈다. 이 일이 예상대로 실행되는 동안 : 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?

두 번째 테스트에서는 각 요소마다 각각을 실행하지만 이전 명령문을 완료하려고하는 이유는 알고 있습니까?

+1

이 메서드는 재귀 적으로 호출하기 때문에 –

+0

그냥 그 것으로 나타났습니다. LOL, 주말 코딩 많은;) –

답변

3

같은 기능 (test1)을 두 번 호출하기 때문에.