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