Ruby动态变量名

Ruby动态变量名,ruby,Ruby,有没有办法用动态名称在Ruby中创建变量 我正在读取一个文件,当我找到一个字符串时,生成一个散列 e、 g 我怎样才能将游戏中的#变成数字(游戏1,游戏2,…)为什么要使用单独的变量?似乎您只希望Game成为一个每次都附加值的列表。然后您可以使用游戏[0],游戏[1],…引用它们,您可以使用如下实例变量 i = 0 file.lines do |l| l.split do |p| if p[1] == "InitGame" instance_variable_set("@

有没有办法用动态名称在Ruby中创建变量

我正在读取一个文件,当我找到一个字符串时,生成一个散列

e、 g


我怎样才能将游戏中的#变成数字(游戏1,游戏2,…)

为什么要使用单独的变量?似乎您只希望
Game
成为一个每次都附加值的列表。然后您可以使用
游戏[0]
游戏[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] # => {}
...

如果你真的想要动态变量名,可能你可以使用散列,而不是你可以设置动态键

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

数字从何而来?在Ruby中,带大写字母的变量名被认为是不好的做法,除非您声明了一个类或模块名。考虑将<代码> GAMEX > <代码> GAMEX。您会如何处理这些动态创建的名称?您的源代码无法引用它们,除非通过笨重的
send
s。在我看来像一个数组。详细信息:
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