目的::在ruby中包含模块之前

时间:2016-04-26 23:14:02

标签: ruby module include

以下两个包含语句之间有何不同:

include ::Module1:Module2

include Module1::Module2

两者都适用于我的情况。但是,我只是想知道哪一个更好(或者两者都更好)。

1 个答案:

答案 0 :(得分:0)

调用::Module1::Module2将引用顶级命名空间,而不是执行语句的相对命名空间。

这在您尝试引用其他模块中的顶级模块的情况下非常有用,例如:

class YourClass
end

module YourModule
  class YourClass
  end

  def self.new_outer_class
    ::YourClass.new
  end

  def self.new_inner_class
    YourClass.new
  end
end

通过上述设置,调用#new_outer_class实际上会实例化在YourClass之外定义的YourModule类的实例,而调用#new_inner_class将实例化YourModule::YourClass,因为它在YourModule内相对并被调用。

希望有所帮助!