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,…)

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

 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] # => {} ... 

为何使用单独的变量? 看起来你只想让Game成为一个列表,每次都附加值。 然后你可以用Game[0]Game[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