ruby - section - wbr tag in html5
Ruby: ¿qué hace:: prefijo? (3)
The :: es el operador de resolución de alcance. Lo que hace es determinar en qué alcance 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
end
Para acceder a Music::Record desde fuera de Music , debe usar Music::Record .
Para hacer referencia a Music::Record from Music::EightTrack puedes simplemente usar Record porque está definido en el mismo ámbito (el de Music ).
Sin embargo, para acceder al módulo de Record responsable de la interfaz con su base de datos desde Music::EightTrack no puede usar el Record porque Ruby cree que quiere Music::Record . Ahí es cuando usaría el operador de resolución de alcance como un prefijo, especificando el alcance global / principal: ::Record .
Estaba leyendo 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 Net::HTTP lugar de ::Net::HTTP , es decir, qué significa cuando usas :: como prefijo?
Un operador :: refiere al alcance global en lugar de local. Esta pregunta también se ha hecho antes.
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
En el caso específico de Artifice, en la línea 41 del archivo que ha mostrado se define un módulo Net interno. Para mantener el acceso al módulo Net externo, usa ::Net .