В рубине для фиксации ошибки каждый использует rescue
оператор. обычно этот оператор происходит между begin
и end
. Можно также использовать a rescue
оператор как часть блока (do ... end
) или метод (def ... end
). Мой вопрос - то, что другие структуры (цикл, в то время как, если...), если кто-либо спасет вложенное множество в?
Вы можете использовать спасение только в двух случаях:
В пределах begin ... end
block
begin
поднять
rescue
nil
end
Как модификатор оператора
i = raise rescue nil
Тела функций, модулей и классов (спасибо Jörg) неявны begin ... end
, поэтому вы можете выполнить спасение внутри любой функции без явного begin
/ end
.
def foo
raise
rescue
nil
end
Форма блока принимает необязательный список параметров, определяющих, какие исключения (и потомки) для спасают
:
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
end
Если вызывается встроенным в качестве модификатора оператора или без аргумента в begin
/ end
, спасение перехватит StandardError
и его потомки .
Вот документация 1.9 по rescue
.