我正在动态创建非命名空间的类。
我已经看到了一个在Object类中完成此创建的示例:
class Object
for elem in ARRAY
sub_class = Object.const_set(elem.to_s.camelize, Class.new(SuperClass))
sub_class.class_eval do
def initialize(*args, &block)
...
super *args, &block
end
end
end
end
我的问题:
答案 0 :(得分:2)
有趣。经过一些实验,从不同的上下文调用SomeConstant.const_set
没有任何区别,因此在class Object
块中调用它与在顶层命名空间中定义它是一样的。
此外:全局命名空间中的所有内容都在Object类中被隐含地定义,因此它实际上是多余的。我可以看到[在不同的类或内核模块中定义它]的唯一优势是,常量将可用于所有类,查找链将查看Object
类之前的Kernel
类1}}模块。