Ruby 获取加载时添加的内容

Ruby 获取加载时添加的内容,ruby,load,Ruby,Load,有没有办法获取加载外部ruby文件时添加或重新定义的所有常量(包括模块和类)及其方法和类或实例变量的列表(数组)?这应该可以做到: def all_constants_with_methods constants = Object.constants.map { |sym| Object.const_get sym } Hash[constants.map { |constant| [constant, (constant.instance_methods rescue [])] }]

有没有办法获取加载外部ruby文件时添加或重新定义的所有常量(包括模块和类)及其方法和类或实例变量的列表(数组)?

这应该可以做到:

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]

但是,据我所知,没有办法知道方法是否被重新定义。您可以轻松地将其扩展到类变量(使用
类变量
)和类实例变量(使用
实例变量
)。

谢谢。我还将考虑递归应用这一点来获得常量中的常量。