È 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
fonte
2012-08-27 13:19:51
ho una spiegazione su questo qui: http://stackoverflow.com/questions/11523547/rails-and-class-variables/11523632#11523632 – Frost
Google esso. Sono serio. – vise