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 Enumerabledef kollectnew_ary =self.each do |elem|new_ary << yield(elem)endnew_aryendend
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.