0

我有一个包含许多实例方法的现有类。我想封装(或子类)该类,以便新类可以调用所有这些原始实例方法,并简单地委托给内部(或父)类,但也可以在前后调用自己的代码代表团。

例如,这是我正在寻找的一些伪代码:

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​​ 中实现这一点的最佳方法是什么?谢谢

4

1 回答 1

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

应该做的伎俩。

于 2012-09-01T21:29:36.820 回答