我正在阅读Artifice的来源并看到:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
Run Code Online (Sandbox Code Playgroud)
line:https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
为什么不做,Net::HTTP而不是::Net::HTTP,当你::用作前缀时它意味着什么?
cor*_*ard 203
这::是范围解析运算符.它的作用决定了模块的范围.例如:
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
Run Code Online (Sandbox Code Playgroud)
要从Music::Record外面访问Music你会使用Music::Record.
要引用Music::Record从Music::EightTrack您可以简单地使用Record,因为它是在同一范围内(即定义Music).
但是,要访问Record负责与您的数据库连接的模块,Music::EightTrack您不能只使用,Record因为Ruby认为您想要Music::Record.那时您将使用范围解析运算符作为前缀,指定全局/主要范围:::Record.
Gui*_*nal 14
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
Run Code Online (Sandbox Code Playgroud)
在Artifice的特定情况下,在您显示的文件的第41行定义了一个内部Net模块.为了保持对外部Net模块的访问,它使用::Net.
yan*_*yan 10
一个::运营商是指在全球范围内,而不是本地的.之前也曾问过这个问题.