在模块命名空间中创建动态命名的 class

Create dynamically named class within module namespace

我正在使用 Grape API 并且我的模型具有 url 属性,我正在使用该属性为其动态安装端点。我需要能够对它们进行版本控制,但在生成它们时无法正确命名它们。

如果我在模块中创建 class,则 class 是命名空间。

module MyModule
  module SubModule
    class MyClass
    end
  end
end
=> nil 
MyModule::SubModule::MyClass
=> MyModule::SubModule::MyClass 

但是,如果我动态地在模块中创建 class,则它没有命名空间。

module MyModule
  module SubModule
    dynamic_name = "ClassName"
    Object.const_set(dynamic_name, Class.new)
  end
end
=> ClassName 
MyModule::SubModule::ClassName
NameError: uninitialized constant MyModule::SubModule::ClassName
ClassName
=> ClassName 

有没有办法为动态创建的 class 命名空间?

Object.const_set 显式设置 Object 命名空间中的常量,该命名空间是根命名空间。如果您在没有 Object 的情况下使用 const_set,它将在当前名称空间的任何位置设置常量,在您的示例中为 MyModule::SubModule