Подтвердить что ты не робот

В Ruby, какие структуры могут содержать оператор `rescue` в

В ruby, чтобы поймать ошибку, используется оператор rescue. обычно это утверждение происходит между begin и end. Можно также использовать оператор rescue как часть блока (do ... end) или метод (def ... end). Мой вопрос в том, что другие структуры (цикл, while, if,...), если кто-нибудь спасет гнездо внутри?

4b9b3361

Ответ 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.