:: 在 ruby 中包含模块之前的用途

Purpose of :: before include module in ruby

下面两个include语句有什么区别:

include ::Module1:Module2

include Module1::Module2

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

调用 ::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 实际上会实例化在 YourModule 之外定义的 YourClass class 的实例,而调用 #new_inner_class 会实例化YourModule::YourClass 因为它是相对于 YourModule.

并在其中调用的

希望对您有所帮助!