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