Ruby中::前缀是做什么的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我正在阅读Artifice的来源,并看到:

module Artifice
  NET_HTTP = ::Net::HTTP
  # ...
end

github.com/wycats/artifice/blob/master/lib/artifice.rb#L6

为什么不只是做Net::HTTP而不是::Net::HTTP,当你::用作前缀时,这意味着什么?

提问于
用户回答回答于

::是范围解析运算符。它所做的是确定可以在哪个范围内找到模块。例如:

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::Record从外面访问Music会使用Music::Record

要引用Music::RecordMusic::EightTrack您可以简单地使用Record,因为它是在同一范围内(即定义Music)。

但是,要访问Record负责与数据库接口的模块,Music::EightTrack不能仅仅使用,Record因为Ruby认为需要Music::Record。那时你将使用范围解析操作符作为前缀,指定全局/主范围:::Record

用户回答回答于

一个::是指在全域范围内,而不是本地的。这个问题以前也被问过。

扫码关注云+社区