2010-09-17 15 views
6

Vengo de C++ y JAVA, que con Scope puede ser global o local.Ruby Instance Variable Scope Pregunta

Ahora estoy aprendiendo ruby-on-rails y con ruby ​​hay local, instancia y global. Nunca había oído hablar de instancia hasta ahora.

Con o sin rieles, ¿cuál es la comprensión y el uso de la variable de instancia?

Global = Variable across all objects share 
Instance = Variable inside of the object 
Local = Variable inside of the object 

Creo que estoy recibiendo ejemplos y locales un poco mezclados.

@ham 
ham 

Estas son dos variables diferentes ¿no? A veces me confundo en Rails porque usan cosas intercambiables como @ algo y: algo. ¿Porqué es eso?

Como utilizo el framework de rieles, todo lo que entiendo es que la variable de instancia es algo a lo que puede acceder la vista.

¿Alguien puede aclarar estas variables?

Respuesta

6

variable de instancia en Ruby es como el de Java, parte del estado del objeto:

class MyObject 
    def set_x(x) 
    @x = x 
    end 

    def get_x 
    @x 
    end 
end 

Equivalente código Java:

class MyObject { 
    private Object x; 

    void setX(Object x) { 
     this.x = x; 
    } 

    Object getX() { 
     return x; 
    } 
} 

y locales variable es sólo un acceso variable sólo dentro de este particular método:

def doIt 
    x = 3; 
    # x not accessible from outside of doIt 
    puts x 
end 

void doIt() { 
    int x = 3; 
    // same in Java 
    System.out.println(x); 
} 

edición
¿Qué quiere decir con estado del objeto?

MyObject o = new MyObject(); 
o.setX(3); 
// integer 3 is now stored in variable 'x' of object 'o' 
// I can return any time later and get that value back by 'o.getX()' 
+0

¿Qué quiere decir con objeto de estado? – RoR