我有一个子类,它的许多方法都有一个共同的模式:
if some_condition
(real code goes here)
else
super
end
理想情况下,我想将其封装在以下内容中:
def if_some_condition
if some_condition
yield
else
(calling method's super)
end
end
有什么方法可以捕获调用方法的super
,以便我可以在else
分支中调用它if_some_condition
?
(在建议使用另一个子类之前,请注意some_condition
在该类中对象的生命周期内可能会经常更改。)
编辑:
一个可能的解决方案是:
def if_some_condition(&b)
if some_condition
yield
else
b.send(:binding).eval('super')
end
end
eval
不过,如果可能的话,我宁愿避免使用。