我正在尝试使用蒸汽冷凝器宝石为特定用户(我自己)提取游戏列表。到目前为止,我有以下内容:
require 'steam-condenser'
id = SteamId.new 'tamachan87'
games_owned = id.games
games_owned
现在是一个散列,包含键和数组。
如果我在IRB中拨打games_owned.values
,我会得到一个结果,其中包含这些游戏的所有信息,从ID号到名称到徽标哈希。
但是,当我使用以下内容时:
games_owned.each do |key, array|
puts "==== #{key} ===="
puts array
end
我只得到数组的第一个值,如:
==== 200260 ====
#<SteamGame:0x00000100beb0a8>
每个值/数组都有一个@name
变量,这是我唯一想要提取的内容。
有人可以帮助我更好地了解这些哈希以及如何从中提取特定数据(@name
)吗?
提前致谢。
答案 0 :(得分:1)
您获得不友好的类名和内存值的原因是SteamGame
类没有定义inspect
方法。但是,如果您有兴趣打印游戏名称,请使用puts key.name
答案 1 :(得分:1)
如果要使用“puts”以漂亮的方式打印Steamgame对象 你应该在Steamgame类中覆盖“to_s”。
你得到不同结果的原因是put使用to_s方法来打印它的参数(也就是说 在你的情况下具有特定id的steamgame对象)。 如果您使用“p”或“puts array.inspect”而不是“puts”,它将调试您的对象,您将看到类似结果的irb。
如果您的Steamgame类中有@name这样的属性,您应该只需说: games_owned.values [i] .name或puts array.name。 你试过吗?
答案 2 :(得分:1)
SteamId#games
的返回值不是数组的哈希值,而是SteamGame
个对象的哈希值。
您的示例代码可以这样编写:
games_owned.each do |app_id, game|
puts "==== #{app_id} ===="
puts game.name
end
有关详细信息,请参阅documentation of SteamId。