我有以下Ruby类:
我希望修改调用
在
class Sandwich
class << self
def prepare_with(special_ingredient, &block)
# Some very very special magic is done here to
# call instead just .fry! as .fry!({:ingredient=>special_ingredient})
# and for any other method the same
end
def fry!(opts= {})
end
def add_mayo(opts = {})
end
end
end
class Hamburger < Sandwich
end
=> Hamburger.prepare_with(bacon) do
=> Hamburger.fry!
=> Hamburger.add_mayo
=> end
我希望修改调用
Hamburger
类的所有方法并将额外的key=>value
添加到最后一个参数哈希表。在
Sandwich.prepare_with
中需要进行一些特殊的魔法来调用Sandwich(和其所有子类)的所有方法,如使用call
而不是仅使用.fry!
,例如.fry!({:ingredient=>special_ingredient})
。
编辑:另外一个理想情况是我们需要过滤内部块代码的调用,例如以下代码为任何prepare_with代码引发异常,因为它没有过滤调用附加参数的方法:=> Hamburger.prepare_with(bacon) do
=> Hamburger.fry!
=> h = Hash.new("Go fish")
=> Hamburger.add_mayo
=> end