ellos Inicialización en la definición del módulo.
module MyModule
# self here is MyModule
@species = "frog"
@color = "red polka-dotted"
@log = []
def self.log(msg)
# self here is still MyModule, so the instance variables are still available
@log << msg
end
def self.show_log
puts @log.map { |m| "A #@color #@species says #{m.inspect}" }
end
end
MyModule.log "I like cheese."
MyModule.log "There's no mop!"
MyModule.show_log #=> A red polka-dotted frog says "I like cheese."
# A red polka-dotted frog says "There's no mop!"
Esto configurará las variables de instancia cuando se defina el módulo. Recuerde, usted puede volver a abrir alwasys el módulo más tarde para agregar más variables de instancia y definiciones de métodos, o redefinir las existentes:
# continued from above...
module MyModule
@verb = "shouts"
def self.show_log
puts @log.map { |m| "A #@color #@species #@verb #{m.inspect}" }
end
end
MyModule.log "What's going on?"
MyModule.show_log #=> A red polka-dotted frog shouts "I like cheese."
# A red polka-dotted frog shouts "There's no mop!"
# A red polka-dotted frog shouts "What's going on?"
El primer bloque de código no establece un var de instancia de módulo (var en el alcance del objeto de tipo de MyModule), mientras que el segundo establece una var de instancia "simple" (una var en el alcance de una instancia que incluye módulo)? Creo que estos dos bloques de código no hacen lo mismo ... –