Руби: Как «следующий» внешний цикл? - PullRequest
2 голосов
/ 08 марта 2010
file.each_line do |line|
  #skip the first one/not a user
  3.times { next } if first == 1
  first = 2
end

Как я могу получить «следующую» скважину, «следующую» итерацию each_line, вместо итерации 3.times? Кроме того, как я могу написать это, чтобы выглядеть лучше (то есть: first == 1 выглядит плохо)

Ответы [ 4 ]

6 голосов
/ 08 марта 2010

Вы можете использовать метод drop, чтобы отбросить первую пару элементов:

File.open('bar').each_line.drop(3).each do |line|
  puts line
end
1 голос
/ 08 марта 2010

Ваш внутренний цикл может установить переменную флага (скажем, break_out = true) перед этим break s, и вы можете проверить эту переменную, как только выйдете из внутреннего цикла. Если вы обнаружите, что флаг установлен, вырвитесь из внешнего цикла.

Скорее всего, есть лучший способ структурирования вашего кода, чтобы делать то, что вы хотите. Вы просто хотите пропустить первые три строки? Если это так, попробуйте что-то вроде:

line_count = 0
file.each_line do |line|
  #skip the first one/not a user
  line_count += 1
  next if (line_count <= 3 && first == 1)
  first = 2
end
0 голосов
/ 09 марта 2010

Если файл не слишком большой, вы можете сделать

file.read.split("\n")[3..-1].each do |line_you_want|
  puts line_you_want
end
0 голосов
/ 08 марта 2010

Я думаю, вам нужно добавить еще один оператор if там

file.each_line do |line|
  #skip the first one/not a user
  3.times { next } if first == 1
  break if something
  first = 2
end
...