2016-12-01 67 views
0

我试图了解使用puts时的输出。我知道puts确实返回零,但是,我在与Hashes合作时遇到了一些问题。了解puts输出

我想要下面的块使用字符串插值以某种格式输出每个键/值对,但是,即使puts按预期工作,我注意到我的终端也打印了整个哈希,如下所示。我想知道如何防止这种情况。

@hash.each do |key,val| 
    puts "[#{key}] '#{val}'" 
end 

[fish] 'aquatic animal' 
[zebra] 'African land animal with stripes' 
[apple] 'fruit' 
=> {"fish"=>"aquatic animal", "zebra"=>"African land animal with stripes", "apple"=>"fruit"} 
+1

实际上,“终端”不打印任何东西,它是正在运行的代码打印它。终端只显示它。如果使用'ruby some_script.rb'运行你的代码,你将不会看到'each'的返回值,因为没有'puts';你需要'puts @ hash.each ...'。因为你看到的是输出,所以你使用的是IRB或Pry,而不是直接使用Ruby,这会让你对真正发生的事情感到困惑。 IRB/Pry是非常有用的工具,但您必须牢记与Ruby解释器的不同之处。 –

回答

1

each方法总是返回它遍历的东西,它不会返回块提供的价值。大概这是这样的,你可以连接多个each调用通过多次运行,如果有必要。

请记住,使用块的方法没有义务使用这些块返回的任何值,也没有义务甚至运行该块。

正如锡曼指出,这里的显示实际上是REPL的一个工件,代表“Read-Evaluate-Print-Loop”。您会看到评估您的each调用的结果,这是返回值。

0

终端总是输出最后一个方法的结果,您的情况为each。每个返回集合,所以它输出集合。你可以稍微改变你的代码返回零,它可以防止长时间输出。

@hash.each do |key,val| 
    puts "[#{key}] '#{val}'" 
end; nil