lista elementos declarar crear bidimensionales añadir arreglos array ruby arrays each self

ruby - declarar - ¿Por qué cada Array#devuelve una matriz con los mismos elementos?



crear lista en ruby (4)

Array # cada

La forma de bloque de Array#each devuelve el objeto Array original. Por lo general, usa #each cuando quiere hacer algo con cada elemento de una matriz dentro del bloque. Por ejemplo:

[1, 2, 3, 4, 5].each { |element| puts element }

Esto imprimirá cada elemento, pero devuelve la matriz original . Puedes verificar esto con:

array = [1, 2, 3, 4, 5] array.each { |element| element }.object_id === array.object_id => true

Array # mapa

Si desea devolver una nueva matriz, desea utilizar Array#map o uno de sus sinónimos. La forma de bloque de #map devuelve un objeto Array diferente. Por ejemplo:

array.object_id => 25659920 array.map { |element| element }.object_id => 20546920 array.map { |element| element }.object_id === array.object_id => false

Por lo general, querrá usar #map cuando desee operar en una versión modificada de la matriz original, sin dejar el original modificado.

Estoy aprendiendo los detalles de cómo funciona each en ruby ​​y probé la siguiente línea de código:

p [1,2,3,4,5].each { |element| el }

Y el resultado es una serie de

[1,2,3,4,5]

Pero no creo entender por qué. ¿Por qué el valor de retorno de each la misma matriz? ¿No solo cada uno proporciona un método para iterar? ¿O es simplemente una práctica común que each método devuelva el valor original?


Si quiere, por alguna razón, suprimir la salida (por ejemplo, la depuración en la consola) aquí es cómo puede lograr eso.

[1,2,3,4,5].each do |nr| puts nr.inspect end;nil


Todos los métodos devuelven algo. Incluso si es solo un objeto nil , devuelve algo.

También puede devolver el objeto original en lugar de devolver nil .


Array#each devuelve el objeto [array] sobre el que se invocó: el resultado del bloque se descarta . Por lo tanto, si no hay efectos secundarios desagradables en la matriz original, entonces nada habrá cambiado.

Tal vez te refieres a usar el map ?

p [1,2,3,4,5].map { |i| i*i }