implementera Ruby 's Collect Method
Ruby ’s Collect method
Ruby’ s collect
metoden är en del av den uppräknade mixin; en mixin som ger mycket användbara och kraftfulla metoder för samlingsobjekt. collect
är en metod som jag använder hela tiden och nyligen skrev om i min artikel som arbetar med enumerables: fyra kraftfulla insamlingsmetoder.
collect
låter dig omvandla varje element i ditt samlingsobjekt (Array, Hash eller ditt eget objekt) till något annat och slutar med en Array.
Här är ett enkelt exempel på att ta en rad heltal och multiplicera var och en av dem med 2.
.collect{ |num| num * 2 }#
Re-implementing the Collect method
Jag ville skapa min egen collect
metod för att se hur den implementeras. Det visar sig att det görs ganska enkelt, i cirka 5 rader kod. Jag borde säga att det enda användningsfallet jag inte täcker är när inget block skickas till metoden, i vilket fall en Enumerator vanligtvis returneras.
vi lägger till vårt nya kollect
(så namnen strider inte) till den uppräknade modulen. Looping genom vår samling, vi tillämpar blocket på varje element och lägger till det returnerade resultatet till en ny Array som skapas.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
om vi jämför detta med Rubys källkod, gör det i huvudsak samma sak, men är mycket enklare eftersom vi arbetar med Ruby själv, och inte C.
med vår nya Insamlingsmetod
nu är allt som är kvar att se om kollect
metoden faktiskt fungerar! Jag ville prova det med både den normala blocksyntaxen, men också den korta handen &:metod_name syntax, för att säkerställa både arbete.
bra! I båda fallen tar det namnen i matrisen och konverterar dem till versaler.