我有一个模块MyModule.我动态地将类加载到其中.如何获取在其命名空间中定义的类的列表?

例子:

def load_plugins
  Dir.glob(File.dirname(__FILE__) + '/plugins/*.rb') do |f|
    MyModule.class_eval File.read(f)
  end

  # now how can I find the new classes I've loaded into MyModule?
end

我应该说,每f个都包含类似"class Foo;end"的内容.

您也可以这样想:在Rails中,如何通过编程找到ActiveRecord模块中定义的所有类?

推荐答案

类是通过常量访问的.模块中定义的类在该模块中列为常量.所以你只需要 Select 引用类的常量.

MyModule.constants.select {|c| MyModule.const_get(c).is_a? Class}

Ruby相关问答推荐

使用 RSpec 测试嵌套哈希时随机排序数组的匹配

使用 Ruby,我如何访问和比较这些嵌套的数组值?

用函数组合枚举器的Ruby方法

如何在 Shopify 脚本编辑器中显示数组值?

是否有类似于 Ruby 的 Sinatra 的 .NET 框架?

需要在Ruby中将数组拆分为指定大小的子数组

Ruby: initialize() vs 类体(class body)?

如何在 Ruby 中合并多个哈希?

我如何判断哪些模块已混合到一个类中?

判断Ruby中的目录是否为空

如何记录在 Ruby 程序中调用的每个方法?

RSpec 是否有可能期望在两个表中发生变化?

从索引到字符串结尾的子字符串的Ruby成语

Ruby:从字节创建一个字符串

如何声明 RSpec 中示例之间共享的变量?

获取下周一(或一周中的任何一天)的日期的 Ruby 代码

如何在不使用循环的情况下按数组中的计数分组

Ruby Style:如何判断嵌套的哈希元素是否存在

相当于 Ruby 的 cURL?

如何使用器重新安装 gem