Ruby动态变量名

Gui*_*los 26 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
Run Code Online (Sandbox Code Playgroud)

如何将Game_#中的#更改为数字(Game_1,Game_2,...)

saw*_*awa 38

您可以使用实例变量来完成

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
Run Code Online (Sandbox Code Playgroud)

但你应该使用一个数组作为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] # => {}
...
Run Code Online (Sandbox Code Playgroud)


vir*_*tor 9

为何使用单独的变量?看起来你只想Game成为一个列表,每次都附加值.然后,你可以参考它们Game[0],Game[1]...