首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >::ModuleName::ClassName和ModuleName::ClassName的区别

::ModuleName::ClassName和ModuleName::ClassName的区别
EN

Stack Overflow用户
提问于 2012-02-22 23:47:23
回答 2查看 186关注 0票数 7

在ruby中,我开始看到一种非常正常的做法,包括引用为::ModuleName::ClassName的模块和混合,而在过去,它几乎只是ModuleName::ClassName。

我想在这里得到的是一个像样的理解,为什么这种做法最近更多地出现,以及它的不同之处。

有什么关系呢?

好处是什么(如果先验没有回答这个问题)?

提前感谢您的意见。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-22 23:52:56

如果您将::放在开头,您引用的是全局名称空间,否则您引用的是您当前的名称空间。

通常,如果您的类/模块中没有同名的类/模块,则不需要在开始时使用::

代码语言:javascript
复制
class Customer

  def to_s
    "Customer global"
  end

end


class Order

  class Customer
    def to_s
      "Customer within order"
    end
  end


  def initialize
    puts Customer.new
    puts ::Customer.new
  end


end

Order.new

将打印输出

代码语言:javascript
复制
Customer within order
Customer global
票数 9
EN

Stack Overflow用户

发布于 2012-02-22 23:55:02

当你使用::ModuleName::ClassName时,你会说:

我希望您在根命名空间中查找::ModuleName::ClassName,忽略此代码是否在另一个模块中找到。因此,它将始终查找名为::ModuleName::ClassName的类,而不查找其他类

当你像这样说ModuleName::ClassName时,你是在说:

我希望你先看ModuleName::ClassName,但是先看当前的作用域,然后再看其他的作用域。因此,如果您有一个名为MyModule的模块,并且我的模块引用了ModuleName::ClassName,那么首先尝试查找MyModule::ModuleName::ClassName,然后尝试解析::ModuleName::ClassName

当我像这样定义代码时,我几乎总是使用::ModuleName::ClassName来避免任何命名冲突。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9398095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档