Как изменить переменную цикла в ruby? - PullRequest
1 голос
/ 26 июля 2010
for i in (0..5)
  if(i==0)
    i=4
  end
  puts i
end

В вышеприведенной программе я исключил вывод как - 4 5

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

Поэтому я заключаю, что переменная цикла не изменяется.Как это можно изменить?Кто-нибудь может мне сказать?

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

Ответы [ 3 ]

9 голосов
/ 26 июля 2010

Единственный способ изменить переменную цикла - это использовать цикл 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 голосов
/ 26 июля 2010

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

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

производит:

4
5
0 голосов
/ 26 июля 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...