self.zaraza llama al método accesor, mientras que @zaraza accede directo a
la variable.
por ejemplo:
class Proceso
def duracion
@duracion+' hs'
end
def duracion=(val)
@duracion = val.gsub(' hs','')
end
end
puts @duracion
=> "20"
puts self.duracion
=> "20 hs"
cuando hacés
@duracion = '10 hs'
la variable @duracion queda con el valor '10'
en cambio, cuando haces
self.duracion = '10 hs'
la variable @duracion queda con el valor '10 hs', porque se la está
accediendo directamente.
o sea, que cuando llamas con @duracion te estás salteando el método getter y
cuando haces @duracion= te estas salteando el setter.
cuando usas attr_accessor para declarar atributos, attr_accessor crea estos
métodos getter y setter <i>on the fly</i>, y lo mismo pasa con las columnas
de las clases ActiveRecord en Rails.
saludos, Maximiliano
2009/11/24 Bruno Deferrari <[email protected]>
> 2009/11/24 Leonardo Gallucci
> <[email protected]<leonardogallucci%[email protected]>
> >:
> > Gente,
> >
> > Alguien sabe con seguridad a nivel Ruby language cual es la diferencia
> entre
> > usar @instance_var contra self.instance_var ?
> >
> >
> > gracias,
> > --
> > Leonardo Gallucci
> > Developer at Delapalo Labs
> > http://twitter.com/leonardog (@leonardog)
> > http://delicious.com/leonardogallucci
> >
> >
> > _______________________________________________
> > Ruby mailing list
> > [email protected]
> > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
> >
> >
>
> @instance_var referencia a la variable de la instancia,
> self.instance_var le manda el mensaje 'instance_var' a self.
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar