8

Esiste un modo (meta-programma?) Per leggere/scrivere una variabile di istanza quando conosciamo solo il nome della stringa?Come accedere alla variabile di istanza dal suo "nome stringa"?

Ad esempio, ho una variabile di istanza @my_var utilizzata all'interno di un metodo di classe. Durante il processo, dovrò avere una stringa "my_var" che mi dica di cambiare la variabile di istanza @my_var.

Ovviamente potrei usare un'istruzione "se", ma voglio che sia più dinamica poiché avrò potenzialmente molte variabili di istanza differenti nel mio metodo.

Stavo pensando a qualcosa con "my_var" .classify e qualcos'altro ...

Qualcuno ha un indizio?

Grazie per il vostro aiuto

risposta

14

Usa instance_variable_set e instance_variable_get. Tieni presente che la stringa deve avere il leader @:

@foo = "bar" 
# => "bar" 
instance_variable_get("@foo") 
# => "bar" 
instance_variable_set("@foo", "baz") 
# => "baz" 
@foo 
# => "baz"