tag section script samp bootstrap 3school ruby namespaces

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 .