在Ruby中,我如何反映包含在模块中的类



我正在使用一个库,它像这样布局它的库:

module Lib
  class A; end
  class B; end
  ...
end

我知道我可以在对象上使用send来"调用"只在运行时才知道的方法(例如,foo.send(:bar, :baz_param=>42)。我如何在班级层面做到这一点?

换句话说,我怀疑有一种方法可以这样写:

label = :Klass
MyModule.some_method(label).new

实际上执行为:

MyModule::Klass.new

我说的对吗?

当我发布这个问题时,我灵机一动:

const_get

类名被视为常量,并且该方法也是为所有模块定义的,因此查找范围可以仅限于该模块。只要记住大写正确:

MyModule.const_get(:Klass).new # => #<Klass:> #CORRECT
MyModule.const_get(:klass).new # => NameError: wrong constant name

相关内容

  • 没有找到相关文章

最新更新