首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby: prefix是做什么的?

Ruby: prefix是做什么的?
EN

Stack Overflow用户
提问于 2011-02-18 02:12:46
回答 3查看 15.9K关注 0票数 94

我通读了一下Artifice的源代码,发现:

代码语言:javascript
复制
module Artifice
  NET_HTTP = ::Net::HTTP
  # ...
end

线路:https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6

为什么不直接使用Net::HTTP而不是::Net::HTTP,也就是说,当你使用::作为前缀时,这意味着什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-18 02:31:45

::是作用域解析操作符。它所做的是确定一个模块可以在什么范围内找到。例如:

代码语言:javascript
复制
module Music
  module Record
    # perhaps a copy of Abbey Road by The Beatles?
  end

  module EightTrack
    # like Gloria Gaynor, they will survive!
  end
end

module Record
  # for adding an item to the database
end

要从Music外部访问Music::Record,您需要使用Music::Record

要从Music::EightTrack引用Music::Record,可以简单地使用Record,因为它是在相同的作用域(Music的作用域)中定义的。

然而,要从Music::EightTrack访问负责与数据库交互的Record模块,您不能只使用Record,因为Ruby认为您需要Music::Record。这时您可以使用作用域解析操作符作为前缀,指定全局/主作用域:::Record

票数 232
EN

Stack Overflow用户

发布于 2011-02-18 02:29:37

代码语言:javascript
复制
module A
  def self.method; "Outer"; end
end
module B
  module A
    def self.method; "Inner"; end
  end
  A.method   # => "Inner"
  ::A.method # => "Outer"
end

在特殊情况下,在您所显示的文件的line 41中定义了一个内部Net模块。为了保持对外部Net模块的访问,它使用::Net

票数 16
EN

Stack Overflow用户

发布于 2011-02-18 02:15:17

::运算符引用全局作用域,而不是局部作用域。

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

https://stackoverflow.com/questions/5032844

复制
相关文章

相似问题

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