4

我有一个实体类,在这个类中我曾经有一个名为 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 实例化配置

但是,我不明白这样命名类名的含义。有人可以向我解释这里到底发生了什么吗?

4

1 回答 1

4

当您编写时class SomethingSomething您提供的是常量的名称,因此使用::运算符提供名称等同于首先打开外部类并以这种方式创建内部类。::运算符只是一种从类或模块外部访问类或模块中的常量的方法。例如,这样的事情是完全有效的:

class Outer
  class Inner
  end

  class Inner::EvenMoreInner
  end
end

class Outer::Inner::EvenMoreInner::InnerMost
end

请注意,您不能只编写class Some::New::Class::Hierarchy并自动创建所有包含类。即Some::New::Class必须首先存在。这就是为什么我在我对该问题的评论中询问您所写代码的确切顺序的原因。

于 2012-11-06T15:54:58.607 回答