2

重複の可能性:
メソッドにモンキー パッチを適用する場合、オーバーライドされたメソッドを新しい実装から呼び出すことができますか?

したがって、メソッドをオーバーライドして条件付きチェックをメソッドに単純に追加したいのですが、元のメソッドを呼び出す必要があります。Rubyでこれをどのように行うのですか?

すなわち。

メソッドが存在する

def fakeMethod(cmd)
  puts "#{cmd}"
end

そして追加したい

if (cmd) == "bla"
  puts "caught cmd"
else
  fakeMethod(cmd)
end

何か案は?

4

3 に答える 3

8
alias :old_fake_method :fake_method
def fake_method(cmd)
  if (cmd) == "bla"
    puts "caught cmd"
  else
    old_fake_method(cmd)
  end
end
于 2013-01-18T18:33:16.083 に答える
2

継承を使用しない理由。これは、オーバーライドされたメソッドが追加のロジックで拡張される古典的な例です。

class Foo
  def foo(cmd)
    puts cmd
  end
end

class Bar < Foo
  def foo(cmd)
    if cmd == "hello"
      puts "They want to say hello!"
    else
      super
    end
  end
end

Foo.new.foo("bar")   # => prints "bar"
Bar.new.foo("hello") # => prints "They want to say hello"

確かに、このソリューションは、サブクラス インスタンスをインスタンス化する機会がある場合にのみ機能します。

于 2013-01-18T18:33:10.143 に答える
0

このための ruby​​ にはalias_method_chainalias _method があります。

(alias_method_chain は ruby​​ ではなく、ActiveSupport::CoreExtensions にあるため、これが Rails アプリケーションでない場合は必須にする必要があります)

于 2013-01-18T18:28:09.207 に答える