Articles

implementacja Rubiego 's Collect Method

Ruby 's Collect method

Ruby’ s collect jest częścią Enumerable mixin; mixin, który zapewnia bardzo przydatne i potężne metody dla obiektów kolekcji. collect to metoda, której używam cały czas i o której ostatnio pisałem w moim artykule praca z enumerables: cztery potężne metody zbierania.

collect umożliwia przekształcenie każdego elementu obiektu kolekcji (tablicy, skrótu lub własnego obiektu) w coś innego, kończąc na tablicy.

Oto prosty przykład wzięcia tablicy liczb całkowitych i pomnożenia każdej z nich przez 2.

.collect{ |num| num * 2 }
#

ponowne zaimplementowanie metody Collect

chciałem stworzyć własną metodęcollect, aby zobaczyć, jak jest ona zaimplementowana. Okazuje się, że odbywa się to dość łatwo, w około 5 linijkach kodu. Powinienem powiedzieć, że jedynym przypadkiem użycia, którego nie omawiam, jest przypadek, gdy żaden blok nie jest przekazywany do metody, w którym to przypadku Zwykle zwracany jest Enumerator.

dodamy nasz nowy kollect (aby nazwy nie kolidowały) do modułu Enumerable. Zapętlając naszą kolekcję, zastosujemy blok do każdego elementu, dodając zwrócony wynik do nowej tablicy, która jest tworzona.

module Enumerable
def kollect
new_ary =
self.each do |elem|
new_ary << yield(elem)
end
new_ary
end
end

Jeśli porównamy to z kodem źródłowym Rubiego, zasadniczo robi to samo, ale jest o wiele prostsze, ponieważ pracujemy z samym Rubim, a nie z C.

używając naszej nowej metody Collect

teraz pozostaje tylko sprawdzić, czy metodakollect faktycznie działa! Chciałem Spróbować używając zarówno zwykłej składni blokowej ,jak i krótkiej &:składnia method_name, aby zapewnić działanie obu metod.

Super! W obu przypadkach przyjmuje nazwy w tablicy i konwertuje je na wielkie litery.