创建类在运行时按如下方式完成:
klass = Class.new superclass, &block
Object.const_set class_name, klass
例子:
class Person
def name
"Jon"
end
end
klass = Class.new Person do
def name
"#{super} Doe"
end
end
Object.const_set "Employee", klass
puts Employee.new.name # prints "Jon Doe"
现在,假设您有一个名为 Company 的模块:
module Company
end
如何在 Company 模块/命名空间内运行时创建 Employee 类,以便以下产生相同的结果?
puts Company::Employee.new.name # prints "Jon Doe"
最佳答案
比你想象的要简单:)
Company.const_set "Employee", klass
当您在 Object
上设置某些内容时,它就变成了全局的,因为一切都是 Object
。但是您可以对每个类/模块执行 const_set
。请记住,模块/类只是常量。所以,Company::Employee
是常量 Company
中的常量 Employee
。很简单:)
完整代码:
class Person
def name
"Jon"
end
end
klass = Class.new Person do
def name
"#{super} Doe"
end
end
module Company
end
Company.const_set "Employee", klass
Company::Employee.new.name # => "Jon Doe"
关于ruby - 在运行时在模块/命名空间中创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176895/