1

すべての定数 (モジュールとクラスを含む) のリスト (配列) と、外部の ruby​​ ファイルのロード時に追加または再定義されるメソッドとクラスまたはインスタンス変数を取得する方法はありますか?

4

1 に答える 1

3

これでうまくいくはずです:

def all_constants_with_methods
  constants = Object.constants.map { |sym| Object.const_get sym }
  Hash[constants.map { |constant| [constant, (constant.instance_methods rescue [])] }]
end

before = all_constants_with_methods
load foo.rb
after = all_constants_with_methods

constants_added = after.keys - before.keys
methods_added = Hash[after.keys.map do |c|
                       [c, after[c] - (before[c] || [])]
                     end.reject do |_, v|
                       v.empty?
                     end]

ただし、メソッドが再定義されたかどうかを知る方法はありません。class_variablesこれをクラス変数 ( を使用) およびクラス インスタンス変数 ( を使用)に簡単に拡張できますinstance_variables

于 2012-10-05T00:40:40.800 に答える