Implementere Ruby ' S Samle Metode
Ruby Samle metode
Ruby collect
metoden er en del Av Enumerable mixin; en mixin som gir svært nyttige og kraftige metoder for samling objekter. collect
er en metode jeg bruker hele tiden og skrev nylig om i min artikkel Som Arbeider med enumerables: Fire kraftige samlingsmetoder.
collect
lar deg forvandle hvert element i samlingsobjektet ditt (Array, Hash eller ditt eget objekt) til noe annet, og ende opp med En Matrise.
her er et enkelt eksempel på å ta En Rekke heltall og multiplisere hver av dem med 2.
.collect{ |num| num * 2 }#
Re-implementere Innsamlingsmetoden
jeg ønsket å lage min egen collect
metode for å se hvordan den implementeres. Det viser seg at det er gjort ganske enkelt, i ca 5 linjer med kode. Jeg burde si at den ene brukssaken jeg ikke dekker, er når ingen blokk sendes til metoden, i så fall returneres en Enumerator vanligvis.
Vi legger til vår nye kollect
(slik at navnene ikke er i konflikt) til Den Nummererbare modulen. Looping gjennom vår samling, bruker vi blokken til hvert element, og legger til det returnerte resultatet til en ny Matrise som blir opprettet.
module Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
hvis vi sammenligner Dette Med ruby kildekode, det egentlig gjør det samme, men er mye enklere fordi vi jobber med Ruby selv, og Ikke C.
Ved hjelp av vår nye Samle metode
nå er alt som er igjen er å se om kollect
metoden faktisk fungerer! Jeg ønsket å prøve det med både normal blokk syntaks ,men også korthånden &:method_name syntaks, for å sikre både arbeid.
Flott! I begge tilfeller tar det navnene i Arrayet og konverterer dem til store bokstaver.