2014-02-04 6 views
2

Как написать запись в циклы в 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.

ответ

4

Вы должны использовать 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 
} 
2

Перемещайте исключение ловли в 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 
+0

Я не думаю, что вам нужно 'next', bihaid. –

+0

@CarySwoveland да, я не продумал код, я только что изменил код OP, чтобы отразить то, что ему нужно было сделать, 'next' действительно не изменило бы здесь, как вы это заметили, спасибо и хорошо с моим handle :) – bjhaid

+0

ах, да, сделайте это j. –