我希望能够做这样的事情:
def do_stuff(parameter)
raise StandardError
end
def foo(parameter)
rescuer { do_stuff(parameter) }
end
def rescuer
begin
yield # evaluate passed block
rescue StandardError
puts parameter # evaluate this with having access to `parameter` from block
end
end
foo('bar')
#=> bar
实现这一目标的最简单的方法是什么?
答案 0 :(得分:1)
有一种杂乱的方式来执行此操作,这种方式非常有针对性,但这在狭窄的情况下有效:
def rescuer(&block)
begin
yield
rescue StandardError
p block.binding.local_variable_get(:parameter)
end
end
块上的binding
使您可以访问碰巧已定义的任何/所有局部变量。