A :: B类名在ruby中的含义是什么?

时间:2012-11-06 15:41:31

标签: ruby class module namespaces

我有一个类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

实例化配置

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

1 个答案:

答案 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必须先存在。这就是为什么我查询你在我对这个问题的评论中写的代码的确切顺序。

相关问题