Использование значения переменной в качестве имени другой переменной в Ruby
-
22-09-2019 - |
Вопрос
Я только начинаю изучать Ruby и написал программу, которая генерирует несколько чисел и присваивает их переменным @one, @two, @three и т. д.Затем пользователь может указать переменную для изменения, введя ее имя (например, один).Затем мне нужно сделать что-то вроде «@[valueofinout] = asd».Как бы мне это сделать, и есть ли лучший способ, поскольку тот способ, о котором я думаю, кажется, разочаровывает?Я нашел
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
но я не совсем понимаю, зачем нужна вторая строка.В моем случае я бы использовал что-то вроде
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
Решение
Использовать instance_variable_set
(Рубидок)
instance_variable_set("@" + varname, value)
Однако в большинстве случаев вам следует отделить обычные переменные Ruby от переменных, с которыми взаимодействует ваш пользователь.Как насчет создания хэша пользовательских переменных, например.
@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
Другие советы
Переменные экземпляра можно получить с помощью этого метода:
input = instance_variable_get("@one")
После этого в вашем случае у вас будет input
равен «21».