Articles

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 Enumerable
def kollect
new_ary =
self.each do |elem|
new_ary << yield(elem)
end
new_ary
end
end

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.