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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top