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
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top