Там нет соответствующих эквивалентов на defer
заявление в рубине, однако, если вы хотите, чтобы убедиться, что конкретный блок кода выполняется, вы можете использовать ensure
заявление. Разница в том, что вы не можете складывать блоки кода, такие как defer, но результат тот же.
В блоке
begin
# ...
ensure
# This code will be executed even if an exception is thrown
end
В способе
def foo
# ...
ensure
# ...
end
Object#ensure Marks окончательная, необязательное предложение о начать конец блока /, как правило, в тех случаях, когда блок также содержит предложение о спасении. Код гарантии в условии обеспечения гарантированно будет выполнен, независимо от того, идет ли управление потоками на аварийный блок или нет.
Кто-то downvoted это. Зачем? Не работает ли этот код? Имеются ли уродливые последствия? Это выглядит законным и опрятным. – Narfanator