2015-10-06 2 views
3

Это кажется мне хорошо, и я не могу найти документацию, в которой говорится иначе, но я бы хотел, чтобы она была проверена. У меня есть часть кода, которая по какой-то причине может выйти из строя, гарантировать после нее защиту, если она терпит неудачу, а затем выполнить какой-то код независимо от того, что произойдет. Кажется, что требуется вложенный блок begin/make. Это верно? (Там нет никакого фактического спасения здесь, только что тип блока.)Вложено начало/спасение/обеспечение работоспособности?

кода выглядит следующим образом:

begin 
    # save default state 
    begin 
     # save current state 
     # set state for this snippet 
     # snippet 
    ensure 
     # return current state or default if none 
    end 
    ensure 
    # schedule next execution of this code, always. 
    end 
+0

здесь подробная статья об этом: http://www.skorks.com/2013/04/ruby-why-u-no-have-nested-exceptions/ – asiniy

+0

@asiniy Интересная статья о проблемах вокруг нее, но в нем говорится: «Ruby не позволяет нам устанавливать исключения». Какие? Исключения вложенности присущи языку, если я полностью не понимаю это утверждение. –

+0

@asiniy В этой статье речь идет о чем-то совершенно другом. Это не относится к этому вопросу вообще. – meagar

ответ

3

То есть совершенно правильный подход. Вложения часто необходимы, иногда в том же методе, который вы делали здесь, а иногда и через стек вызовов.

+0

meagar, вы абсолютно правы. Спасибо. Ошибка в получении или настройке состояния могла бы сработать мое решение. Редактировал мой ответ, чтобы отразить ваше проницательное наблюдение. –

+0

Угадайте, что я что-то пропустил, но спасибо ... –