结帐此代码和输出
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'。
答案 0 :(得分:64)
保留块的返回值被丢弃 - 它只是一种在函数执行任何预期后清理的方法(并返回适当的值)。这样做的原因是它允许您将多个return
语句(或raise
语句)放在函数体的不同位置,而不必在函数的不同位置复制清理代码。 / p>
答案 1 :(得分:12)
请参阅this blog post,了解ensure
对隐式和显式返回的行为的概述。
答案 2 :(得分:-1)
好像你必须明确地返回true,ensure
可能不会自动返回最后一个值。