2014-10-09 164 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