2012-08-27 16 views
6

Eventuali duplicati:
Rails and class variablesRubino: Differenza tra istanza e variabili locali in Ruby

Qualcuno potrebbe dirmi che cosa è la differenza tra le variabili di istanza di Ruby e le variabili locali?

Per quanto ne so, sia le variabili di istanza che le variabili locali sono uguali, ed entrambi sono dichiarati all'interno del metodo stesso e salvo che le variabili di istanza sono denotate usando il simbolo @.

+0

ho una spiegazione su questo qui: http://stackoverflow.com/questions/11523547/rails-and-class-variables/11523632#11523632 – Frost

+1

Google esso. Sono serio. – vise

risposta

11

È una questione di scope. Una variabile locale è visibile/utilizzabile solo nel metodo in cui è definita (vale a dire, si spegne quando il metodo restituisce).

Una variabile di istanza, d'altra parte, è visibile in qualsiasi altra posizione nell'istanza della classe in cui è stata definita (questa è diversa da una variabile di classe, che è condivisa tra tutte le istanze di una classe). Tenere presente, tuttavia, che quando si definisce la variabile di istanza è importante. Se si definisce una variabile di istanza in un unico metodo, ma tenta di utilizzarlo in un altro metodo prima di chiamare il primo, la vostra variabile di istanza avrà un valore pari a zero:

def method_one 
    @var = "a variable" 

    puts @var 
end 

def method_two 
    puts @var 
end 

@var avrà un valore diverso a seconda quando si chiama ciascun metodo:

method_two() # Prints nil, because @var has not had its value set yet 

method_one() # Prints "a variable", because @var is assigned a value in method_one 

method_two() # Prints "a variable" now, because we have already called method_one 
+0

ottima risposta - vorrei aggiungere che se una variabile locale (ad esempio localVar) è dichiarata in method_one, non può essere chiamata da method_two. – BKSpurgeon

Problemi correlati