Unter Verwendung des Wertes einer Variablen als weitere Variablen in Ruby nennen
-
22-09-2019 - |
Frage
Ich bin gerade erst aus Rubin in dem Lernen und ich habe ein Programm geschrieben, das einige Zahlen und ordnet sie Variablen @One erzeugt, @two, @three usw. Der Benutzer kann dann eine Variable zu ändern angeben kann durch seine Eingabe Name (zB eins). Ich brauche dann etwas zu tun, wie ‚@ [valueofinout] = asd‘. Wie würde ich das tun, und gibt es eine bessere Art und Weise, wie die Art und Weise den ich denke scheint entmutigen zu lassen? Ich habe festgestellt,
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
aber ich verstehe nicht ganz, warum die zweite Zeile benötigt wird. In meinem Fall würde ich so etwas wie
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Lösung
Verwenden instance_variable_set
( RubyDoc )
instance_variable_set("@" + varname, value)
In den meisten Fällen jedoch sollten Sie Ihre normale Ruby-Variablen aus den Variablen trennen Ihre Benutzer interagiert. Wie wäre es ein Hash von Benutzervariablen erstellen, z.
@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
Andere Tipps
Instanzvariablen können über diese Methode abgerufen werden:
input = instance_variable_get("@one")
Danach wird in Ihrem Fall Sie input
gleich "21" hat.