2010-07-26 2 views
1
for i in (0..5) 
    if(i==0) 
    i=4 
    end 
    puts i 
end 

В приведенной выше программе я освобожденный вывод, как - 4 5Как изменить переменную цикла в ruby?

Но вместо этого - 4 1 2 3 4 5

Таким образом я делаю вывод, что петля переменного изменения не. Как это изменить? Может ли кто-нибудь сказать мне?

На самом деле, в моей программе мне нужно сохранить текущее состояние цикла и получить позже, чтобы следующая программа запуска возобновилась с той же точки, где она была оставлена.

+1

wow, ruby ​​имеет 'for' loop! Никогда не использовал один! –

+0

Проверьте ответ JRL на этот вопрос: http://stackoverflow.com/questions/1654637/ruby-forgets-local-variables-during-a-while-loop Использование блочных переменных Ruby объясняет поведение, которое вы видите. – FuePi

ответ

9

Единственный способ вы будете иметь возможность изменять переменную цикла, чтобы использовать while цикл:

x = (2..7).to_a 
i = 0 
while (i < x.length) 
    i = 4 if i == 0 
    puts x[i] 
    i = i + 1 
end 

Выход:

6 
7 

В for, как вы обнаружили, вы можете изменить переменную цикла, и это значение будет сохранено для этой итерации цикла. На следующей итерации он будет извлекать следующий элемент из указанного вами диапазона, поэтому ваше измененное значение будет по существу перезаписано.

3

Невозможно сделать это без взлома. Следующим лучшим было бы использовать next.

x = (0..5).to_a 
for i in (0..5) 
    if(i < 4) 
    next 
    end 
    puts x[i] 
end 

производит:

4 
5 
0

Я не уверен, как ваш код относится к проблеме, о которой вы позже упоминаете. Мне кажется, что все, что вам нужно сделать, это:

start_pos = load_start_pos || 0 # if not available for load, assume zero 
(start_pos..end_pos).each do |i| 
    if need_to_exit? 
    save_start_pos i # save for later 
    break # exit the loop 
    end 
end 
Смежные вопросы