我试图使用蒸汽冷凝器宝石为特定的用户(我自己)的游戏列表。到目前为止,我有以下几点:
require 'steam-condenser'
id = SteamId.new 'tamachan87'
games_owned = id.gamesgames_owned现在是一个散列,包含键和数组。
如果我在IRB中调用games_owned.values,我将得到一个包含这些游戏的所有信息的结果,从它的ID号到名称到它的徽标哈希。
但是,当我使用以下内容时:
games_owned.each do |key, array|
puts "==== #{key} ===="
puts array
end我只得到数组的第一个值,如:
==== 200260 ====
#<SteamGame:0x00000100beb0a8>每个值/数组都有一个@name变量,这是我唯一想要拉的东西。
有人能帮助我更好地理解这些散列,以及如何从它们中提取特定数据(@name)吗?
提前谢谢。
发布于 2014-09-28 06:30:16
SteamId#games的返回值不是数组的哈希,而是SteamGame对象的哈希。
您的示例代码可以这样编写:
games_owned.each do |app_id, game|
puts "==== #{app_id} ===="
puts game.name
end有关更多信息,请参见SteamId文档。
发布于 2014-09-26 16:39:05
获得不友好的类名和内存值的原因是SteamGame类没有定义inspect方法。但是,如果您感兴趣的只是打印游戏名称,请使用puts key.name
发布于 2014-09-26 17:06:11
如果你想用"puts“很好地打印你的蒸汽游戏对象,你应该在你的蒸汽游戏类中覆盖"to_s”。
获得不同结果的原因是使用to_s方法打印其参数(在您的情况下,它是带有特定id的蒸汽游戏对象本身)。如果您使用"p“或"puts array.inspect”而不是"puts",它将调试您的对象,您将看到irb一样的结果。
如果在蒸汽游戏类中有@name这样的属性,那么只需说: games_owned.valuesi.name或puts array.name就可以得到它。你试过了吗?
https://stackoverflow.com/questions/26063527
复制相似问题