Utilizzando il valore di una variabile come un altro nome variabili in Ruby
-
22-09-2019 - |
Domanda
Sono appena agli inizi a imparare Ruby e ho scritto un programma che genera alcuni numeri e li assegna alle variabili @one, @two, @three ecc L'utente può quindi specificare una variabile di cambiare inserendo è nome (ad esempio uno). Ho quindi bisogno di fare qualcosa di simile a '@ [valueofinout] = asd'. Come faccio a fare questo, e c'è un modo migliore come il modo in cui sto pensando di sembra essere scoraggiato? Ho trovato
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
, ma non del tutto a capire il motivo per cui è necessaria la seconda linea. Nel mio caso dovrei usare qualcosa come
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Soluzione
Usa instance_variable_set
( rubydoc )
instance_variable_set("@" + varname, value)
Nella maggior parte dei casi però, si dovrebbe separare le normali variabili rubino dalle variabili l'utente interagisce con. Che ne dite di creare un hash di variabili utente, per es.
@uservars = { 'one' => 1, 'two' => 2 }
two = @uservars['two'] # Look up 'two' variable
varname = "myvar"
@uservars[varname] = 5 # Set a variable by name
value = @uservars[varname] # Get a variable by name
Altri suggerimenti
variabili di istanza possono essere recuperati tramite questo metodo:
input = instance_variable_get("@one")
Dopo questo, nel tuo caso si dovrà input
uguale a "21".