我在尝试使用puts
时了解输出。我知道puts
确实会返回nil,但是,在使用Hashes时遇到了一些问题。
我希望以下块使用字符串插值以某种格式输出每个键/值对,但是,即使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"}
答案 0 :(得分:1)
each
方法总是返回它迭代的东西,它不会返回块提供的值。据推测,如果需要,您可以将多个each
调用链接在一起以多次运行。
请记住,采用块的方法没有义务使用这些块返回的任何值,也没有义务甚至运行块。
正如The Tin Man所指出的,这里的显示实际上是irb
REPL的一个人工制品,代表" Read-Evaluate-Print-Loop"。您正在查看评估each
来电的结果,即回复值。
答案 1 :(得分:0)
终端总是在您的情况下输出最后一个方法的结果each
。每个返回集合,因此它输出集合。您可以稍微更改代码以返回nil,这会阻止长输出。
@hash.each do |key,val|
puts "[#{key}] '#{val}'"
end; nil