ruby:我如何获得作为Module子级的所有Class和/或Module对象?

lin*_*des 3 ruby

假设我有以下内容:

module A
  class B
    # ...
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

假设我有几个不同的文件,具有不同的B值,但都在同一个模块中(A).从一个require文件然后require是这些文件中的每个文件,是否有一种内省/反思的方法(这些是不同的东西?我对这种区别是朦胧的,如果是这样的话)来确定(并获取对象)模块中的类?

我试过这个,这让我有点接近:

A.constants # => ["B"]
Run Code Online (Sandbox Code Playgroud)

但我宁愿回来[A::B],而不是一个字符串,这样我就可以调用类似的东西singleton_methods,这对我的程序很有用,它试图将数据映射到各种子类的方法中.

有办法做到这一点吗?我一直在寻找答案,并找到了一些相关的东西,比如这个或者这个,但没有任何相关的东西.

lin*_*des 6

哈!你不知道吗?在写完这篇文章之后,我发现了一个似乎对我有用的答案:

A.constants.collect{|k| A.const_get(k)}.select {|k| k.is_a?(Class)} # => [A::B]
Run Code Online (Sandbox Code Playgroud)

甜蜜,这很容易,一旦我把正确的部分放在一起.:)