def some_method
puts 'in method'
return 'I am a return value'
ensure
puts 'will print at the end'
# Can I somehow get the return value of some_method here?
end
Run Code Online (Sandbox Code Playgroud)
是否有一些(可能是元编程)原则/方法来获取方法在"ensure"子句中的返回值,该子句是方法定义的一部分(无论如何我们都知道它们执行)?
只需将您的返回值设为变量即可。您可以在 ensure 语句中使用该变量,但该方法的返回值将是该方法的非异常部分中评估的最后一个语句。例如:
def some_method
puts 'in method'
value = 'I am a return value'
ensure
puts 'will print at the end'
puts value
true
end
some_method
#=> "I am a return value"
Run Code Online (Sandbox Code Playgroud)
请注意,即使您提前返回,上述技术也有效,因为传递给return关键字的值仍然是最后一个计算的非异常表达式。例如,以下方法不应返回 false:
def return_true
return value = true
false
ensure
puts value
false
end
return_true
#=> true
Run Code Online (Sandbox Code Playgroud)