Как убедиться работает в ruby - PullRequest
39 голосов
/ 18 ноября 2009

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

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

Ответы [ 3 ]

64 голосов
/ 18 ноября 2009

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

12 голосов
/ 18 ноября 2009

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

0 голосов
/ 18 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...