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
È stato utile?

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".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top