Implementando Ruby' s Collect Method
El método Collect de Ruby
Ruby’s collect
el método es parte del mixin Enumerable; un mixin que proporciona métodos muy útiles y potentes para objetos de colección. collect
es un método que uso todo el tiempo y sobre el que escribí recientemente en mi artículo Trabajando con enumerables: Cuatro poderosos métodos de recopilación.
collect
le permite transformar cada elemento de su objeto de colección (Matriz, Hash o su propio objeto) en otra cosa, terminando con una matriz.
Este es un ejemplo simple de tomar una matriz de enteros y multiplicar cada uno de ellos por 2.
.collect{ |num| num * 2 }#
Volver a implementar el método Collect
Quería crear mi propio método collect
para ver cómo se implementa. Resulta que se hace con bastante facilidad, en aproximadamente 5 líneas de código. Debo decir que el único caso de uso que no cubro es cuando no se pasa ningún bloque al método, en cuyo caso generalmente se devuelve un Enumerador.
Agregaremos nuestro nuevo kollect
(para que los nombres no entren en conflicto) al módulo Enumerable. Recorriendo nuestra colección, aplicaremos el bloque a cada elemento, agregando el resultado devuelto a un nuevo Array que se está creando.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
Si comparamos esto con el código fuente de Ruby, esencialmente hace lo mismo, pero es mucho más simple porque estamos trabajando con Ruby en sí, y no con C.
Usando nuestro nuevo método de recopilación
Ahora todo lo que queda es ver si el método kollect
realmente funciona! Quería probarlo usando la sintaxis de bloque normal, pero también la mano corta &:sintaxis nombre_método, para asegurar que ambos funcionen.
Genial! En ambos casos toma los nombres de la matriz y los convierte en mayúsculas.