Suponiendo lo siguiente:Ventajas de autoatribuir vs. atributo @?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
¿Por qué es mejor usar el 'yo'. en lugar de una variable de instancia '@alta'?
Suponiendo lo siguiente:Ventajas de autoatribuir vs. atributo @?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
¿Por qué es mejor usar el 'yo'. en lugar de una variable de instancia '@alta'?
El uso del self.salt =
hará que se use el método salt=
, si está definido. Esto es útil para garantizar que se utilicen las comprobaciones/transformaciones de errores dentro del método salt=
. Sin embargo, significa que debe haber un método explícito salt=
(posiblemente creado por attr_accessor
, por ejemplo), y esto no es necesariamente una buena idea.
Resumen: use self.salt =
si tiene un método personalizado salt=
; use @salt =
si sabe exactamente lo que quiere que sea @salt
, o si no tiene un método personalizado salt=
.
Nota final: Probablemente lo escribo como esto (en mi opinión es un poco más claro)
def create_new_salt
@salt = "#{object_id}#{rand}"
end
Edit: Gracias a @ comentarios de Chuck en otra respuesta, he modificado esta opción para eliminar la self.
-código libre: estaba mal.
Además de la gran respuesta de Peter, normalmente señalo en Ruby que estoy usando attr_accessor
usando self.attr = y self.attr en lugar de @attr.
Editar: Sin "auto.", Está creando una variable local. Yikes.
con la respuesta de Pedro:
Otro punto interesante es que se puede invocar self.salt=
incluso si la sal = método es privado. Esta es una excepción a la regla Ruby normal de que un método privado no puede invocarse con un receptor explícito.
Muchas gracias Peter! Estoy de acuerdo, me gusta mejor tu versión. – Kevin