inizializzarle nella definizione del modulo.
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!"
Questo imposterà le variabili di istanza quando il modulo è definito. Ricorda che puoi alwasys riaprire il modulo di seguito per aggiungere più variabili di istanza e le definizioni di metodo, o ridefinire quelli esistenti:
# 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?"
Il primo blocco di codice non imposta un var di istanza di modulo (una var nell'ambito di oggetto di tipo MyModule), mentre il secondo imposta un'istanza di "plain" var (una var nell'ambito di un'istanza che includeva il modulo)? Penso che questi due blocchi di codice non facciano la stessa cosa ... –