0

我正在尝试使用 steam-condenser gem 为特定用户(我自己)提取游戏列表。到目前为止,我有以下内容:

require 'steam-condenser'

id = SteamId.new 'tamachan87'
games_owned = id.games

games_owned现在是一个哈希,包含键和数组。

如果我调用games_owned.valuesIRB,我会得到一个包含所有这些游戏信息的结果,从它的 ID 号到名称到它的徽标哈希。

但是,当我使用以下内容时:

games_owned.each do |key, array|
    puts "==== #{key} ===="
    puts array
end

我只得到数组的第一个值,例如:

==== 200260 ====
#<SteamGame:0x00000100beb0a8>

每个值/数组事物都有一个@name变量,这是我想要提取的唯一事物。

有人可以帮助我更好地理解这些哈希以及如何从中提取特定数据(@name)吗?

提前致谢。

4

3 回答 3

1

如果您想使用“puts”以漂亮的方式打印您的 Steamgame 对象,您应该在 Steamgame 类中覆盖“to_s”。

你得到不同结果的原因是 puts 使用 to_s 方法来打印它的参数(在你的情况下它是具有特定 id 的 steamgame 对象本身)。如果您使用“p”或“puts array.inspect”而不是“puts”,它将调试您的对象,您将看到类似 irb 的结果。

如果你的 Steamgame 类中有 @name 之类的属性,你应该可以通过说:games_owned.values[i].name 或 puts array.name 来获得它。你试过吗?

于 2014-09-26T17:06:11.937 回答
1

您获得不友好的类名和内存值的原因是SteamGame该类没有定义inspect方法。但是,如果您感兴趣的只是打印游戏名称,请使用puts key.name

于 2014-09-26T16:39:05.663 回答
1

的返回值SteamId#games不是数组的散列,而是SteamGame对象的散列。

您的示例代码可以这样编写:

games_owned.each do |app_id, game|
  puts "==== #{app_id} ===="
  puts game.name
end

有关更多信息,请参阅SteamId 的文档。

于 2014-09-28T06:30:16.177 回答