On Nov 9, 2006, at 3:32 PM, lamacarena wrote:
end
end
muy interesante los metodos de conveniencia
donde encuentro mas ejemplos y exactamente q es .flatten y .map
Son metodos muy utiles.
flatten es un metodo que ofrecen algunas colecciones. En ese caso
estamos usando Array#flatten[*] que devuelve el array que resulta del
“aplanado” recursivo del array sobre el que se invoca:
irb(main):001:0> [1, [2, 3], [[[[[7, [8]]]]]]].flatten
=> [1, 2, 3, 7, 8]
Asi que cuando uno obtiene de manera natural un array de arrays, y
esta interesado en el array de los elementos mismos, en vez de
complicarse la vida genera lo natural y aplica flatten al resultado.
map itera sobre una coleccion, le pasa cada elemento a un bloque y
construye la coleccion de los resultados:
irb(main):002:0> [1, 2, 3].map { |x| 2*x }
=> [2, 4, 6]
Como cliente_usuarios devuelve una coleccion, y para cada uno
#incidencias devuelve otra coleccion, nos queda natural generar un
array con los arrays de incidencias, a pesar de que queremos un array
con las incidencias mismas. Ves que es un caso de uso de flatten?
– fxn
[*] En el ejemplo, como cliente_usuarios nos viene de AR en realidad
estamos invocando a #flatten sobre un proxy donde AR wrappea las
coleccciones, pero como este no especializa #flatten se delega en un
verdadero Array interno con method_missing, de manera que en ultima
instancia si que se ejecuta Array#flatten.