我正在使用一个库,它像这样布局它的库:
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