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

当我在irb或rails中创build一个迭代,我得到整个结构打印再次在我的terminal或浏览器内。 例:

 a = [1,2,3,4] a.each do |number| puts n end 

在irbterminal或浏览器内的结果:

 1 2 3 4 => [1,2,3,4] 

为什么这个=> [1,2,3,4]出现在浏览器内部? 我无法在页面中创build单个列表,因为整个结构都显示出来了。

Ruby中的每个expression式都返回一个值; 在irb ,刚刚执行的expression式返回的值显示在=>

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

你看他们打印两次:一次作为副作用 ,第二次作为返回值 。 irb总是puts最后的返回值。 each的返回值是它的接收器。 使用irb时,你不能避免这种情况,但是当你将脚本作为独立软件运行时,它们不会显示出来。 First 1 ,…, 4是你的puts的产出。 他们被称为副作用。

因为ruby甚至返回一切块。 所以你的每一个陈述都回来了。 你看到它的输出,因为irb显示你所有的回报。 在脚本中只会输出一次。

irb外面运行,你会开悟的。

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