Soy nuevo en programación. ¿Alguien puede explicar qué .map
haría en:
params = (0...param_count).map
ruby
map
range
enumeration
papa grande
fuente
fuente
map
es un método "funcional" común que se encuentra en los objetos enumerables utilizados para transformar los valores en una secuencia (con consideraciones especiales)...
y...
son formas de crear rangos. Además, ¡ familiarícese con REPL, donde puede probar estas cosas usted mismo! :)Respuestas:
El
map
método toma un objeto enumerable y un bloque, y ejecuta el bloque para cada elemento, generando cada valor devuelto desde el bloque (el objeto original no cambia a menos que usemap!)
:Array
yRange
son tipos enumerables.map
con un bloque devuelve una matriz.map!
Muta la matriz original.¿Dónde es útil esto y cuál es la diferencia entre
map!
yeach
? Aquí hay un ejemplo:La salida:
fuente
map
como si fueramap!
map
, junto conselect
yeach
es uno de los caballos de batalla de Ruby en mi código.Le permite ejecutar una operación en cada uno de los objetos de su matriz y devolverlos a todos en el mismo lugar. Un ejemplo sería incrementar una matriz de números en uno:
Si puede ejecutar un método único en los elementos de su matriz, puede hacerlo en un estilo abreviado como este:
Para hacer esto con el ejemplo anterior, tendría que hacer algo como esto
Para usar más simplemente la técnica de ampersand shortcut, usemos un ejemplo diferente:
La transformación de datos en Ruby a menudo implica una cascada de
map
operaciones. Estudiemap
yselect
, son algunos de los métodos Ruby más útiles en la biblioteca primaria. Son tan importantes comoeach
.(
map
también es un alias paracollect
. Usa lo que funcione mejor para ti conceptualmente).Más información útil:
Si el objeto Enumerable en el que está ejecutando
each
omap
contiene un conjunto de elementos Enumerable (hashes, matrices), puede declarar cada uno de esos elementos dentro de sus tuberías de bloque de la siguiente manera:En el caso de un Hash (también un
Enumerable
objeto, un Hash es simplemente un conjunto de tuplas con instrucciones especiales para el intérprete). El primer "parámetro de tubería" es la clave, el segundo es el valor.Para responder la pregunta real:
Suponiendo que
params
es un hash, esta sería la mejor manera de mapearlo: use dos parámetros de bloque en lugar de uno para capturar el par clave y valor para cada tupla interpretada en el hash.fuente
NoMethodError: private method 'plusone' called for 1:Fixnum
en ruby 2 y 'número incorrecto de args' en ruby 1.9 / 1.8. De todos modos, he usado un lambda:plusone = ->(x) { x + 1 }
a continuación, sacar el símbolo especificador:[1,2,3].map(&plusone)
.private
dentro de la clase donde pusiste tu método antes de poner tu métodoUsando ruby 2.4 puedes hacer lo mismo usando
transform_values
esta característica extraída de rieles a ruby.fuente
0..param_count
significa "hasta e incluido param_count".0...param_count
significa "hasta, pero sin incluir param_count".Range#map
no devuelve unEnumerable
, en realidad lo asigna a una matriz. Es lo mismo queRange#to_a
.fuente
"Asigna" una función a cada elemento en un
Enumerable
- en este caso, un rango. Por lo tanto, llamaría al bloque pasado una vez por cada entero de 0 aparam_count
(exclusivo: tiene razón sobre los puntos) y devolvería una matriz que contiene cada valor de retorno.Aquí está la documentación para
Enumerable#map
. También tiene un alias,collect
.fuente
Range#map
realidad lo convierte en una matriz.Enumerable
, como cada uno. Pensé que sí.El mapa es una parte del módulo enumerable. Muy similar a "recoger" Por ejemplo:
Map proporciona valores que se repiten en una matriz que son devueltos por los parámetros del bloque.
fuente
#each
#each
ejecuta una función para cada elemento en una matriz. Los siguientes dos extractos de código son equivalentes:#map
#map
aplica una función a cada elemento de una matriz, devolviendo la matriz resultante. Los siguientes son equivalentes:#map!
#map!
es como#map
, pero modifica la matriz en su lugar. Los siguientes son equivalentes:fuente