implementering af Ruby 's Collect Method
Rubys Collect method
Rubys collect
metode er en del af den Enumerable blanding; en blanding, der giver meget nyttige og kraftfulde metoder til indsamling af objekter. collect
er en metode, jeg bruger hele tiden og for nylig skrev om i min artikel, der arbejder med enumerables: fire kraftfulde indsamlingsmetoder.
collect
giver dig mulighed for at omdanne hvert element i dit samlingsobjekt (Array, Hash eller dit eget objekt) til noget andet og ender med et Array.
Her er et simpelt eksempel på at tage en række heltal og multiplicere hver af dem med 2.
.collect{ |num| num * 2 }#
Re-implementering af indsamlingsmetoden
Jeg ønskede at oprette min egen collect
metode for at se, hvordan den implementeres. Det viser sig, at det gøres ganske let, i omkring 5 linjer kode. Jeg skal sige, at den ene brugssag, jeg ikke dækker, er, når ingen blok overføres til metoden, i hvilket tilfælde en tæller normalt returneres.
Vi tilføjer vores nyekollect
(så navnene ikke er i konflikt) til det tællelige modul. Når vi løber gennem vores samling, anvender vi blokken på hvert element og tilføjer det returnerede resultat til et nyt Array, der oprettes.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
Hvis vi sammenligner dette med Rubys kildekode, gør det i det væsentlige det samme, men er meget enklere, fordi vi arbejder med Ruby selv og ikke C.
ved hjælp af vores nye indsamlingsmetode
nu er alt, hvad der er tilbage, at se, om kollect
metoden fungerer faktisk! Jeg ville prøve det ved hjælp af både den normale blok syntaks, men også den korte hånd &:metodenavn syntaks, for at sikre begge arbejde.
fantastisk! I begge tilfælde tager det navnene i arrayet og konverterer dem til store bogstaver.