Supponendo che il seguente:Vantaggi di self.attribute vs. @attribute?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
Perché è meglio usare il 'sé'. piuttosto che una variabile di istanza '@salt'?
Supponendo che il seguente:Vantaggi di self.attribute vs. @attribute?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
Perché è meglio usare il 'sé'. piuttosto che una variabile di istanza '@salt'?
Utilizzando self.salt =
verrà utilizzato il metodo salt=
, se definito. Ciò è utile per garantire che vengano utilizzati controlli/trasformazioni degli errori all'interno del metodo salt=
. Tuttavia, significa che deve esistere un metodo esplicito salt=
(probabilmente creato da attr_accessor
, ad esempio) e questa non è necessariamente una buona idea.
Riepilogo: utilizzare self.salt =
se si dispone di un metodo personalizzato salt=
; utilizzare @salt =
se si sa esattamente cosa si desidera che sia @salt
o se non si dispone di un metodo personalizzato salt=
.
Nota finale: probabilmente sarei scrivo come questo (a mio parere è un po 'più chiaro)
def create_new_salt
@salt = "#{object_id}#{rand}"
end
EDIT: grazie a @ commenti di Chuck su un'altra risposta, ho modificato questo per rimuovere il self.
- codice gratuito - era sbagliato.
Oltre all'ottima risposta di Peter, di solito in Ruby viene segnalato che sto utilizzando attr_accessor
utilizzando self.attr = e self.attr anziché @attr.
Modifica: senza "self.", Si sta creando una variabile locale. Yikes.
seguito alla risposta di Pietro:
Un altro punto interessante è che self.salt=
può essere invocata anche se il sale = metodo è privato. Questa è un'eccezione alla normale regola Ruby che un metodo privato non può essere invocato con un ricevitore esplicito.
Grazie mille Peter! Sono d'accordo, mi piace la tua versione migliore. – Kevin