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 }