2010-09-17 6 views
6

Je viens de C++ et JAVA, qui avec Scope est global ou local. J'apprends maintenant ruby-on-rails et avec ruby ​​il y a local, instance et global. Je n'ai jamais vraiment entendu parler de l'instance jusqu'à maintenant.Ruby Instance Variable Scope Question

Avec ou sans rails, quelle est la compréhension et l'utilisation de la variable d'instance?

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

Je pense que j'obtiens un mélange d'instances et locales.

@ham 
ham 

Ce sont deux variables différentes non? Parfois, je suis confus dans Rails parce qu'ils utilisent des choses interchangeables comme @ quelque chose et: quelque chose. Pourquoi donc? Parce que j'utilise la structure de rails, tout ce que je comprends de la variable d'instance est quelque chose qui est accessible par la vue.

Est-ce que quelqu'un peut clarifier ces variables?

Répondre

6

variable d'instance en Ruby est comme celui de Java, une partie de l'état d'objet:

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

    def get_x 
    @x 
    end 
end 

code Java équivalent:

class MyObject { 
    private Object x; 

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

    Object getX() { 
     return x; 
    } 
} 

Et variable locale est juste une variable accessible que dans ce cas particulier méthode:

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); 
} 

modifier
Qu'entendez-vous par état d'objet?

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

Que voulez-vous dire par l'état de l'objet? – RoR