Подтвердить что ты не робот

Имя динамической переменной 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,...)

4b9b3361

Ответ 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