8

Ruby の特定のクラスにモンキー パッチが適用されたことを確認するにはどうすればよいですか? それが可能であれば、パッチが適用された属性の以前の実装を取得することも可能ですか?

4

2 に答える 2

8

フックmethod_addedとがありmethod_undefinedます。Garry Dolleyは、モンキーパッチを防ぐImmutableモジュールを作成しました。

于 2008-12-02T23:14:22.967 に答える
4

method_added を使用してモンキー パッチを追跡する方法に触れているこのブログ投稿を見つけました。パッチが適用されたメソッドを追跡するように拡張することはそれほど難しくありません。

http://hedonismbot.wordpress.com/2008/11/27/monkey-business-2/ :

オープン クラスを使用することで、Class のインスタンスに対して method_added を再定義し、任意のクラスに対してメソッドが定義されるたびにいくつかのカスタム処理を行うことができます。この例では、メソッドが最後に定義された場所を追跡するように method_added を再定義しています。

#!/usr/bin/env ruby                                                                                                                                                           

class Class
    @@method_history = {}

    def self.method_history
        return @@method_history
    end

   def method_added(method_name)
       puts "#{method_name} added to #{self}"
       @@method_history[self] ||= {}
       @@method_history[self][method_name] = caller
   end

   def method_defined_in(method_name)
       return @@method_history[self][method_name]
   end
end
于 2008-12-03T05:40:21.207 に答える