2014-10-09 189 views
-1

我遍歷了一堆在Ruby中嵌套散列與此:迭代散列打印散列?

@data.each do |key, value| 
    puts "Key: #{key}" 
    puts "Value: #{value}" 
end 

與輸出:

Key: 1.0 
Value: {"label"=>"Default Label"} 
{"1.0"=>{"label"=>"Default Label"}} 

現在我真的不明白爲什麼打印的最後一行。它甚至在我從循環中刪除兩個「puts」調用時被打印出來。 我試圖在網上找到關於此行爲的一些信息,但找不到任何東西。 任何方式,我可以防止這種情況發生?或者我誤解了散列上的「每個」調用?

+0

你必須在其他地方有'puts'。 – rohit89 2014-10-09 20:44:31

+0

你在REPL嗎? – 2014-10-09 20:45:58

+0

@ rohit89我現在經歷了10次我的代碼,在我所需要的任何其他地方註釋掉每一個「投入」,並且它仍然顯示出來...... – AreusAstarte 2014-10-09 23:10:37

回答

7

你正在REPL中這樣做。

默認情況下,REPL返回(並打印)最後執行的語句的值。

在這種情況下,它是each,它返回它迭代的集合,以便您看到原始散列。

+2

爲防萬一我不是唯一不熟悉該術語的人,「REPL」代表[「Read,Eval,Print Loop」](http://en.wikipedia.org/wiki/Read%E2%80 %93eval%E2%80%93print_loop)。在Ruby中,它通常指IRB或PRY。 – 2014-10-09 21:38:14

+0

我不應該在REPL中,不。它是腳本的一部分,在Sublime文本中運行。除非崇高的文字做它有趣的東西。 實際上從終端運行腳本也是一樣的。 – AreusAstarte 2014-10-09 23:05:23

+0

@AreusAstarte如果你沒有創建任何輸出,那就不可能有輸出。只有當您在REPL或等效環境中時,纔會看到您未明確要求的輸出。如果你真的看到了這一點,在獨立腳本中複製應該是微不足道的,你可以完整地發佈。 – 2014-10-10 10:44:15