ruby - rails - gema devise
Usar el valor de una variable como otro nombre de variables en Ruby (2)
Estoy empezando a aprender Ruby y escribí un programa que genera algunos números y los asigna a las variables @one, @two, @three, etc. El usuario puede especificar una variable para cambiar ingresando su nombre (ej. uno). Entonces necesito hacer algo como ''@ [valueofinout] = asd''. ¿Cómo lo haría? ¿Hay alguna manera mejor de desanimar la manera en que estoy pensando? He encontrado
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
pero no entiendo completamente por qué es necesaria la segunda línea. En mi caso, ¿usaría algo así como
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Las variables de instancia se pueden recuperar a través de este método:
input = instance_variable_get("@one")
Después de esto, en su caso tendrá una input
igual a "21".
Usar instance_variable_set
( rubydoc )
instance_variable_set("@" + varname, value)
Sin embargo, en la mayoría de los casos, debe separar las variables de Ruby normales de las variables con las que su usuario está interactuando. ¿Qué hay de la creación de un hash de variables de usuario, por ejemplo,
@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