Имя динамической переменной Ruby
Есть ли способ создать переменные в Ruby с динамическими именами?
Я читаю файл, и когда я нахожу строку, генерирует хэш.
например.
file = File.new("games.log", "r")
file.lines do |l|
l.split do |p|
if p[1] == "InitGame"
Game_# = Hash.new
end
end
end
Как я могу изменить # в Game_ # на числа (Game_1, Game_2,...)
Ответы
Ответ 1
Вы можете сделать это с переменными экземпляра типа
i = 0
file.lines do |l|
l.split do |p|
if p[1] == "InitGame"
instance_variable_set("@Game_#{i += 1}", Hash.new)
end
end
end
но вы должны использовать массив, как говорит viraptor. Поскольку у вас, кажется, есть только новый хеш в качестве значения, это может быть просто
i = 0
file.lines do |l|
l.split do |p|
if p[1] == "InitGame"
i += 1
end
end
end
Games = Array.new(i){{}}
Games[0] # => {}
Games[1] # => {}
...
Ответ 2
Зачем использовать отдельные переменные? Похоже, вы просто хотите, чтобы Game
был списком со значениями, добавленными к нему каждый раз. Затем вы можете ссылаться на них с помощью Game[0]
, Game[1]
,...
Ответ 3
Если вам действительно нужны имена динамических переменных, возможно, вы можете использовать Hash, чем можете установить динамический ключ
file = File.new("games.log", "r")
lines = {}
i = 0
file.lines do |l|
l.split do |p|
if p[1] == "InitGame"
lines[:"Game_#{i}"] = Hash.new
i = i + 1
end
end
end