当我在 irb 或 rails 中创建一些迭代时each
,我会在终端或浏览器中再次打印整个结构。例子:
a = [1,2,3,4]
a.each do |number|
puts n
end
irb 终端或浏览器中的结果:
1
2
3
4
=> [1,2,3,4]
为什么会=> [1,2,3,4]
出现在浏览器中?我无法在我的页面中创建单个列表,因为整个结构都出现了。
Ruby 中的每个表达式都返回一个值;在 中irb
,你刚刚执行的表达式返回的值显示在 之后=>
。
的返回值Enumerable::each
是调用的对象each
- 在这种情况下,数组[1,2,3,4]
跑到外面去irb
,你就会开悟。
ruby -e `[1,2,3,4].each {|ele| puts ele}`
您会看到它们打印了两次:一次作为副作用,第二次作为返回值。irb 总是puts
最后一个返回值。的返回值each
是它的接收者。使用 irb 时无法避免这种情况,但当您将脚本作为独立软件运行时,它们不会出现。第一个1
,...,4
是你的输出puts
。它们被称为副作用。
因为红宝石会在所有内容中返回,甚至会阻塞。所以你的每一条语句都在返回。你看到它的输出是因为 irb 向你展示了一切的回报。在脚本中它只会输出一次。