为什么我要打印两次对象?
当我在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}`