class << self
attr_accessor :n, :totalX, :totalY
end
La sintassi precedente viene utilizzata per definire le variabili di istanza di classe. Ma quando penso a ciò che la sintassi implica, non ha alcun senso per me, quindi mi chiedo se questo tipo di sintassi venga usato per altri tipi di definizioni. Il mio punto di confusione qui è questo:In Ruby sono presenti le applicazioni correlate della sintassi: class << self ... end
class << self
L'operatore accodamento normalmente significa "aggiungere ciò che è a destra per l'oggetto a sinistra". Ma nel contesto di questo blocco, come si aggiunge "a mettere il contenuto di questo blocco nella definizione dell'istanza di classe piuttosto che dell'istanza"?
Per lo stesso motivo sono confusa sul motivo per cui in un contesto classe < < sé può definire variabili istanza di classe, mentre in un altro sembra per creare variabili di classe come ad esempio qui:
class Point
# Instance methods go here
class << self
# Class methods go here
end
end
Ok - che' s un buon modo di guardare - la classe è in realtà un dizionario. Ma in realtà hai risposto prima di aggiungere il mio ultimo esempio, dove in un altro contesto la stessa sillaba (secondo il libro che sto leggendo) produce metodi di classe invece di metodi di istanza di classe. Perché l'esempio di classe Point in basso restituisce un metodo di classe mentre l'attr_accessor in alto fornisce attributi che si trovano a livello di istanza di classe? –
Utilizzando effettivamente la spiegazione che hai dato forse posso rispondere alla domanda nel mio commento precedente - il metodo attr_accessor chiama i metodi instance_variable_set e instance_variable_get della classe Class. Normalmente, quelli risulterebbero in variabili di istanza che vengono create, ma poiché stiamo aggiungendo al dizionario di classe, mentre lo inseriamo, stiamo creando variabili di istanza di classe. Ok, penso di averlo capito ora. Grazie. –
-1 fuorviante, poiché la classe << x ... end in realtà aggiunge informazioni al metaclasse di x, non alla classe di x. – rampion