使用蒸汽冷凝器Ruby宝石时,与哈希和阵列混淆

时间:2014-09-26 15:52:33

标签: ruby arrays hash steam-condenser

我正在尝试使用蒸汽冷凝器宝石为特定用户(我自己)提取游戏列表。到目前为止,我有以下内容:

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)吗?

提前致谢。

3 个答案:

答案 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