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

Responder a