Usando o valor de uma variável como um outro nome de variáveis em Ruby
-
22-09-2019 - |
Pergunta
Eu estou apenas começando no aprendizado de Ruby e eu tenho escrito um programa que gera números e atribui-los às variáveis @um, @dois, @, três etc.O usuário pode, em seguida, especificar uma variável para alterar inserindo seu nome (e.g um).Eu, então, precisa fazer algo como '@[valueofinout] = asd'.Como eu iria fazer isso, e não há melhor maneira de como a maneira que eu estou a pensar parece ser desencorajado?Eu encontrei
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
mas eu não entender completamente por que a segunda linha é necessária.No meu caso eu poderia usar algo como
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Solução
Utilização instance_variable_set
(rubydoc)
instance_variable_set("@" + varname, value)
Na maioria dos casos, porém, você deve separar o seu normal Ruby variáveis das variáveis o usuário está interagindo.Como sobre a criação de um Hash de variáveis do usuário, por exemplo,
@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
Outras dicas
Variáveis de instância podem ser obtidas através deste método:
input = instance_variable_get("@one")
Após isso, no seu caso, você vai ter input
igual a "21".