我有一个类Entity,在这个类中我曾经有一个名为Config的内部类。
class Entity
class Config
end
end
Config类已经变得非常大,所以我决定把它带到自己的文件中。但是,我仍然希望保留命名空间,所以我在Config类中加了一个Entity ::在两个不同的文件中留下两个类,就像这样。
#In entity.rb file
class Entity
require 'entity_config.rb'
end
#In entity_config.rb file
class Entity::Config
end
现在我可以使用Entity :: Config.new
实例化配置但是,我不明白命名空间类名称的含义。有人可以向我解释一下这里到底发生了什么吗?
答案 0 :(得分:4)
当您编写class Something
时,您提供的Something
是常量的名称,因此使用::
运算符提供名称相当于首先打开外部类并创建一个内在的那种方式。 ::
运算符只是从类或模块外部访问类或模块中的常量的一种方法。例如这样的事情是完全有效的:
class Outer
class Inner
end
class Inner::EvenMoreInner
end
end
class Outer::Inner::EvenMoreInner::InnerMost
end
请注意,您不能只编写class Some::New::Class::Hierarchy
并自动创建所有包含的类。即Some::New::Class
必须先存在。这就是为什么我查询你在我对这个问题的评论中写的代码的确切顺序。