Как использовать спасение в Ruby без начального и конечного блоков - PullRequest
108 голосов
/ 09 октября 2009

Я знаю о стандартной технике начала спасения

Как просто использовать спасательный блок самостоятельно.

Как это работает и как узнать, какой код отслеживается?

Ответы [ 4 ]

212 голосов
/ 09 октября 2009

Метод «def» может служить оператором «begin»:

def foo
  ...
rescue
  ...
end
47 голосов
/ 09 октября 2009

Вы также можете спасти inline:

1 + "str" rescue "EXCEPTION!"

выведет "ИСКЛЮЧЕНИЕ!" поскольку 'String не может быть принудительно введен в Fixnum'

25 голосов
/ 09 октября 2009

Я часто использую комбинацию def / rescue с проверками ActiveRecord:

def create
   @person = Person.new(params[:person])
   @person.save!
   redirect_to @person
rescue ActiveRecord::RecordInvalid
   render :action => :new
end

Я думаю, что это очень скудный код!

17 голосов
/ 17 сентября 2014

Пример:

begin
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end

Здесь def как выражение begin:

def
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...