我有一个包含许多实例方法的现有类。我希望封装(或子类)该类,以便新类可以在其上调用所有那些原始实例方法,并简单地委托给内部(或父)类,但也可以调用它自己的代码并在代表团之后。
例如,这里有一些我正在寻找的伪代码:
class Wrapper
def initialize(inner)
@inner = inner
end
def __getattr__(method_name, *method_args) # <-- made up syntax
# do something before
ret = @inner.method_name(*method_args) # <-- made up syntax, call method on inner
# do something after
ret
end
在ruby中实现此功能的最佳方法是什么?感谢
答案 0 :(得分:2)
类似的东西:
def method_missing(method_name, *method_args, &block) # <-- made up syntax
if @inner.respond_to? method_name
# do something before
ret = @inner.send(method_name, *method_args, &block) # <-- made up syntax, call method on inner
# do something after
ret
else
super(method_name, *method_args, &block)
end
end
应该做的伎俩。