Usando el valor de una variable como otras variables nombran en Ruby
-
22-09-2019 - |
Pregunta
Me estoy empezando a cabo en el aprendizaje de Ruby y he escrito un programa que genera algunos números y asignados a las variables @one, @two, @three etc. Entonces, el usuario puede especificar una variable al cambio introduciendo su nombre (por ejemplo uno). entonces necesito hacer algo como '@ [valueofinout] = asd'. ¿Cómo voy a hacer esto, y hay una manera mejor, ya que la forma en que estoy pensando parece estar desanimado? He encontrado
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
pero no entiendo completamente por qué se necesita la segunda línea. En mi caso voy a usar algo como
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Solución
Uso instance_variable_set
( rubydoc )
instance_variable_set("@" + varname, value)
En la mayoría de los casos, sin embargo, usted debe separar las variables normales de rubíes de las variables 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
Otros consejos
Las variables de instancia puede ser recuperada a través de este método:
input = instance_variable_get("@one")
Después de esto, en su caso, usted tendrá input
igual a "21".