有没有办法在 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,...)
有没有办法在 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