为什么我要打印两次对象?

时间:2013-01-16 16:42:20

标签: ruby irb

当我在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]出现在浏览器中?我无法在页面中创建单个列表,因为整个结构都会出现。

4 个答案:

答案 0 :(得分:3)

Ruby中的每个表达式都返回一个值;在irb中,您刚刚执行的表达式返回的值显示在=>之后。

Enumerable::each的返回值是调用each的对象 - 在本例中是数组[1,2,3,4]

答案 1 :(得分:0)

您会看到它们打印两次:一次作为副作用,第二次作为返回值。 irb总是puts最后一个返回值。 each的返回值是其接收者。使用irb时无法避免这种情况,但是当您将脚本作为独立软件运行时,它们将不会显示。第一个1,...,4puts的输出。它们被称为副作用。

答案 2 :(得分:0)

因为ruby在所有东西中都会返回。所以你的每个陈述都在回归。你看到它的输出是因为irb向你展示了一切的回报。在脚本中它只输出一次。

答案 3 :(得分:0)

irb之外运行,你就会受到启发。

ruby -e `[1,2,3,4].each {|ele| puts ele}`