Подтвердить что ты не робот

Как обеспечить работу в рубине

проверьте этот код и вывод

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".

4b9b3361

Ответ 1

Обязательное значение возврата блока отбрасывается - это просто способ очистки после того, как функция делает все, что она должна (и возвращает соответствующее значение). Причина этого заключается в том, что она позволяет размещать несколько операторов return (или raise) в разных местах тела функции без необходимости дублировать код очистки в разных местах функции.

Ответ 2

См. этот пост в блоге для обзора того, как ensure ведет себя как с неявным, так и с явным возвратом.

Ответ 3

Кажется, что вы должны явно вернуть true, ensure может просто не возвращать последнее значение автоматически.