首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用蒸汽冷凝器红宝石时对散列和数组的混淆

使用蒸汽冷凝器红宝石时对散列和数组的混淆
EN

Stack Overflow用户
提问于 2014-09-26 15:52:32
回答 3查看 132关注 0票数 0

我试图使用蒸汽冷凝器宝石为特定的用户(我自己)的游戏列表。到目前为止,我有以下几点:

代码语言:javascript
复制
require 'steam-condenser'

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

games_owned现在是一个散列,包含键和数组。

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

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

代码语言:javascript
复制
games_owned.each do |key, array|
    puts "==== #{key} ===="
    puts array
end

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

代码语言:javascript
复制
==== 200260 ====
#<SteamGame:0x00000100beb0a8>

每个值/数组都有一个@name变量,这是我唯一想要拉的东西。

有人能帮助我更好地理解这些散列,以及如何从它们中提取特定数据(@name)吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-28 06:30:16

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

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

代码语言:javascript
复制
games_owned.each do |app_id, game|
  puts "==== #{app_id} ===="
  puts game.name
end

有关更多信息,请参见SteamId文档

票数 1
EN

Stack Overflow用户

发布于 2014-09-26 16:39:05

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

票数 1
EN

Stack Overflow用户

发布于 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就可以得到它。你试过了吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26063527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档