在ruby中,如何包装内部对象的所有实例方法?类似于python的getattr()

时间:2012-09-01 21:17:30

标签: ruby-on-rails ruby

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

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

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中实现此功能的最佳方法是什么?感谢

1 个答案:

答案 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

应该做的伎俩。