Как обеспечить работу в рубине
проверьте этот код и вывод
def lab
yield
ensure
puts 'in ensure block'
true
end
puts lab { puts 'inside inline block'; false }
output is
#inside inline block
#in ensure block
#false
Я ожидал, что после того, как блок будет выполнен, убедитесь, что будет выполняться, и поскольку обеспечение возвращает true, окончательный вывод вызова метода будет "true".
Ответы
Ответ 1
Обязательное значение возврата блока отбрасывается - это просто способ очистки после того, как функция делает все, что она должна (и возвращает соответствующее значение). Причина этого заключается в том, что она позволяет размещать несколько операторов return
(или raise
) в разных местах тела функции без необходимости дублировать код очистки в разных местах функции.
Ответ 2
См. этот пост в блоге для обзора того, как ensure
ведет себя как с неявным, так и с явным возвратом.
Ответ 3
Кажется, что вы должны явно вернуть true, ensure
может просто не возвращать последнее значение автоматически.