Estaba leyendo a través de la fuente de Artifice y vi:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
línea: https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
¿Por qué no simplemente hacer en Net::HTTPlugar de ::Net::HTTP, es decir, qué significa cuando se usa ::como prefijo?
ruby
namespaces
ma11hew28
fuente
fuente

Respuestas:
El
::es el operador de resolución de alcance. Lo que hace es determinar en qué ámbito se puede encontrar un módulo. Por ejemplo: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 endPara acceder
Music::Recorddesde fuera deMusicusted, usaríaMusic::Record.Para hacer referencia
Music::RecordaMusic::EightTrack, simplemente podría usarRecordporque está definido en el mismo alcance (el deMusic).Sin embargo, para acceder al
Recordmódulo responsable de la interfaz con su base de datos,Music::EightTrackno puede usarlo simplementeRecordporque Ruby cree que lo deseaMusic::Record. Fue entonces cuando se usaría el operador de resolución de alcance como prefijo, especificando el alcance mundial / principal:::Record.fuente
module A def self.method; "Outer"; end end module B module A def self.method; "Inner"; end end A.method # => "Inner" ::A.method # => "Outer" endEn el caso específico de Artifice, en la línea 41 del archivo que has mostrado se define un
Netmódulo interno . Para mantener el acceso alNetmódulo exterior , utiliza::Net.fuente
Un
::operador se refiere al ámbito global en lugar de local.fuente