Eu estava lendo a fonte do Artifice e vi:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
linha: https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
Por que não fazer apenas em Net::HTTP
vez de ::Net::HTTP
, ou seja, o que significa quando você usa ::
como prefixo?
ruby
namespaces
ma11hew28
fonte
fonte
Respostas:
O
::
é o operador de resolução do escopo. O que ele faz é determinar em que escopo um módulo pode ser encontrado. Por exemplo:Para acessar
Music::Record
de fora deMusic
você usariaMusic::Record
.Para fazer referência a
Music::Record
partir deMusic::EightTrack
você pode simplesmente usarRecord
porque está definido no mesmo escopo (o deMusic
).Porém, para acessar o
Record
módulo responsável pela interface com seu banco de dadosMusic::EightTrack
você não pode simplesmente usarRecord
porque Ruby acha que você querMusic::Record
. Isso é quando você usar o operador de resolução de escopo como um prefixo, especificando o escopo global / main:::Record
.fonte
No caso específico do Artifice, na linha 41 do arquivo que você mostrou está definido um
Net
módulo interno . Para manter o acesso aoNet
módulo externo , ele usa::Net
.fonte
Um
::
operador se refere ao escopo global em vez de local.fonte