Ciao a tutti, vorrei fare un po’ di chiarezza sulle variabili d’istanza
in ruby/rails: ho notato un comportamento diverso di queste variabili
usando un modello in rails, ed una classe in ruby (provata con irb).
Con entrambe: ho notato che creando una variabile d’istanza non nel
costruttore essa non è visibile negli altri metodi, viene ignorata
(facendo ad esempio @var = “valore”). Perchè? Il bello è dichiararle con
@, se non si possono dichiarare nei metodi avrebbero fatto meglio a
farle dichiarare a livello di classe.
Con una classe in ruby: se dichiaro la variabile d’istanza nel
costruttore essa è visibile e modificabile negli altri metodi
Con un modello: dichiarandole nel costruttore alcune sono visibili,
alcune no
def initialize(session)
@session = session
@user = nil
end
def log_in(user)
if user
@user = user
…
end
end
In questo caso @session viene letta e modificata negli altri metodi,
mentre @user no.
O meglio, in log_in, @user viene impostata correttamente (facendo puts
vedo che è impostata a user), ma è come se non fosse d’istanza, perchè
usando @user in altri metodi questo vale ancora nil. Fatemi sapere,
spero che la domanda sia interessante e non una cosa banale. ciao
nicola