理解输出

时间:2016-12-01 21:13:18

标签: ruby

我在尝试使用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"}

2 个答案:

答案 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