如何确保在红宝石中起作用

时间:2009-11-18 14:38:57

标签: ruby

结帐此代码和输出

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 个答案:

答案 0 :(得分:64)

保留块的返回值被丢弃 - 它只是一种在函数执行任何预期后清理的方法(并返回适当的值)。这样做的原因是它允许您将多个return语句(或raise语句)放在函数体的不同位置,而不必在函数的不同位置复制清理代码。 / p>

答案 1 :(得分:12)

请参阅this blog post,了解ensure对隐式和显式返回的行为的概述。

答案 2 :(得分:-1)

好像你必须明确地返回true,ensure可能不会自动返回最后一个值。