有没有办法获取加载外部 ruby 文件时添加或重新定义的所有常量(包括模块和类)及其方法和类或实例变量的列表(数组)?
问问题
42 次
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 回答