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

これをルビーで実装する最良の方法は何ですか? ありがとう

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 に答える