20.2. Variables de instancia

Una variable de instancia tiene un nombre que comienza con @ y su ámbito está limitado al objeto al que referencia self. Dos objetos diferentes, aún cuando pertenezcan a la misma clase, pueden tener valores diferentes en sus variables de instancia. Desde el exterior del objeto, las variables de instancia, no se pueden alterar e incluso, no se pueden observar (es decir, en Ruby las variables de instancia nunca son públicas) a excepción de los métodos proporcionados explícitamente por el programador. Como con las variables globales, las variables de instancia tienen el valor nil antes de que se inicialicen

Las variables de instancia en Ruby no necesitan declararse. Esto da lugar a una estructura flexible de los objetos. De hecho, cada variable de instancia se añade dinámicamente al objeto la primera vez que se la referencia


ruby> class InstTest
ruby|   def set_foo(n)
ruby|           @foo = n
ruby|   end
ruby|   def set_bar(n)
ruby|           @bar = n
ruby|   end
ruby| end
nil
ruby> i = InstTest.new
#<InstTest:0x401c3e0c>
ruby> i.set_foo(2)
2
ruby> i
#<InstTest:0x401c3e0c  @foo=2>
ruby> i.set_bar(4)
4
ruby> i
#<InstTest:0x401c3e0c  @bar=4, @foo=2>

Obsérvese que i no informa del valor de @bar hasta que no se haya llamado al método set_bar