В Ruby, В чем структуры могут 'спасательный' оператор быть вложенными

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

33
задан John F. Miller 26 March 2010 в 16:08
поделиться

1 ответ

Вы можете использовать спасение только в двух случаях:

  • В пределах 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 .

44
ответ дан 27 November 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: