我正在阅读Artifice的来源,发现:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
行:https : //github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
为什么不做Net::HTTP而不是做::Net::HTTP,即当您::用作前缀时是什么意思?
我正在阅读Artifice的来源,发现:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
行:https : //github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
为什么不做Net::HTTP而不是做::Net::HTTP,即当您::用作前缀时是什么意思?
Answers:
该::是范围解析操作。它的作用是确定可以在哪个作用域下找到模块。例如:
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::Record,Music::EightTrack您可以简单地使用Record它,因为它是在的同一范围内定义的Music。
但是,由于Ruby认为您想要从中访问Record负责与数据库接口的模块,因此Music::EightTrack您不能仅仅使用。那时,您将使用范围解析运算符作为前缀,并指定了全局/主范围:。RecordMusic::Record::Record
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
在Artifice的特定情况下,在您显示的文件的第41行定义了一个内部Net模块。为了访问外部Net模块,它使用::Net。