¿Por qué recibo objetos impresos dos veces?

Cuando estoy en IRB o en Rieles y creo alguna iteración con each , obtengo toda la estructura impresa nuevamente en mi terminal o dentro del navegador. Ejemplo:

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

El resultado en la terminal irb o dentro del navegador:

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

¿Por qué esto => [1,2,3,4] aparece dentro del navegador? No puedo crear una sola lista en mi página porque aparece toda la estructura.

Cada expresión en Ruby devuelve un valor; en irb , el valor devuelto por la expresión que acaba de ejecutar se muestra después de => .

El valor de retorno de Enumerable::each es el objeto que llamó each , en este caso, la matriz [1,2,3,4]

Los ve impresos dos veces: una vez como efecto secundario , la segunda vez como el valor de retorno . irb siempre puts el último valor de retorno. El valor de retorno para each es su receptor. No puede evitar eso al usar irb, pero no aparecerán cuando ejecute el script como software independiente. Los primeros 1 , …, 4 son los resultados de tus puts . Se llaman efectos secundarios.

Porque el Ruby vuelve en todo, incluso en bloques. Entonces tu statement está volviendo. Lo está viendo salir porque IRB muestra el retorno de todo. En una secuencia de comandos, solo se publicaría una vez.

Corre fuera de irb , y serás iluminado.

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