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
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top