我可以在Ruby中的'ensure'中获得返回值吗?

dar*_*mkd 10 ruby

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"子句中的返回值,该子句是方法定义的一部分(无论如何我们都知道它们执行)?

Tod*_*obs 7

分配变量

只需将您的返回值设为变量即可。您可以在 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)