Как выйти из пункта спасения в Ruby?

Как я могу написать возобновление в циклах в Ruby? Вот пример кода.

#!/usr/bin/ruby
#

a = [1,2,3,4,5]

begin
    a.each{|i|
        puts i
    if( i==4 ) then raise StandardError end # Dummy exception case
    }
rescue =>e
  # Do error handling here
  next # Resume into the next item in 'begin' clause
end

Однако при запуске Ruby возвращает сообщение об ошибке

test1.rb:13: Invalid next
test1.rb: compile error (SyntaxError)

Я использую Руби 1.9.3.


person HirofumiTamori    schedule 04.02.2014    source источник


Ответы (2)


Вы должны использовать retry вместо next; Но это вызовет бесконечный цикл (перезапуск retry с начала begin)

a = [1,2,3,4,5]
begin
    a.each{|i|
        puts i
        if  i == 4 then raise StandardError end
    }
rescue =>e
    retry # <----
end

Если вы хотите пропустить элемент и перейти к следующему элементу, поймайте исключение внутри цикла.

a = [1,2,3,4,5]
a.each{|i|
    begin
        puts i
        if  i == 4 then raise StandardError end
    rescue => e
    end
}
person falsetru    schedule 04.02.2014

Переместите захват исключений в блок each, например:

a = [1,2,3,4,5]
a.each do |i|
  puts i
  begin
  # Dummy exception case
  if( i==4 ) then raise StandardError end

  rescue =>e
    # Do error handling here
  end
end
person bjhaid    schedule 04.02.2014
comment
Я не думаю, что тебе нужен next, Бихайд. - person Cary Swoveland; 04.02.2014
comment
@CarySwoveland да, я не продумывал код, я просто изменил код OP, чтобы отразить то, что ему нужно было сделать, next действительно не имел бы здесь значения, как вы заметили, спасибо, и будьте любезны с моей ручкой :) - person bjhaid; 04.02.2014
comment
ах, да, сделай это j. - person Cary Swoveland; 04.02.2014
comment
begin .. rescue не содержит заявления. - person falsetru; 04.02.2014