2014-09-26 54 views
0

我試圖使用蒸汽冷凝器寶石拉特定用戶(我)的遊戲列表。到目前爲止,我有以下幾點:使用蒸汽冷凝器時混亂與哈希和陣列紅寶石寶石

require 'steam-condenser' 

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

games_owned現在是一個哈希,包含鍵和陣列。

如果我在IRB中撥打games_owned.values,我會得到一個結果,其中包含這些遊戲的所有信息,從ID號到名稱以及它的logo哈希。

然而,當我使用下面的:

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

我得到的只是陣列的第一個值,例如:

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

每個值/陣列東西具有@name變量這是唯一我想拉的東西。

有人可以幫助我更好地理解這些哈希值以及如何從中抽取特定數據(@name)嗎?

在此先感謝。

+1

嘗試使用'p數組'而不是'puts'。 – 2014-09-26 15:57:23

回答

1

SteamId#games的返回值不是數組的哈希值,而是SteamGame對象的哈希值。

你的示例代碼可以寫這樣的:

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

更多信息,請參見documentation of SteamId

1

您得到一個不友好的類名和內存值的原因是SteamGame類沒有定義inspect方法。然而,如果你感興趣的是打印遊戲名稱,請使用puts key.name

1

如果你想通過使用「puts」 來美麗地打印Steamgame對象,你應該在Steamgame類中覆蓋「to_s」。

你得到不同結果的原因是puts使用to_s方法來打印它的參數(它是 steamgame對象本身在你的情況下與特定的id)。 如果你使用「p」或「puts array.inspect」而不是「puts」,它會調試你的對象,你會看到irb就像結果一樣。

如果您在Steamgame類中擁有類似@name的屬性,您應該可以通過以下方式獲取它: games_owned.values [i] .name或puts array.name。 你嘗試過嗎?