我的子类在其许多方法中都有一个共同的模式:
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
的{{1}}分支中调用它?
(在建议使用另一个子类之前,请注意if_some_condition
可能会在该类中对象的生命周期内频繁更改。)
编辑:
可能的解决方案是:
some_condition
尽管如此,我宁愿避免使用def if_some_condition(&b)
if some_condition
yield
else
b.send(:binding).eval('super')
end
end
。
答案 0 :(得分:0)
我认为你永远不应该从课外调用super ...也许你可以添加一个布尔参数“super”,当“super”为true时你调用super方法
您可以在此处查看结果:http://repl.it/KOd
class My_base_class
def methode_one(argument={})
puts "yabadabadou"
end
end
class My_sub_Class < My_base_class
def methode_one(argument={})
if(argument[:super])
puts "taratata"
else
super
end
end
end
def if_some_condition(b)
if 1==1
b.methode_one({:super=>false})
else
b.methode_one({:super=>true})
end
end
def if_some_other_condition(b)
if 1==0
b.methode_one({:super=>false})
else
b.methode_one({:super=>true})
end
end