7.7. Nietypowe metody klasyfikujące i kolekcjonujące

Problem

Podstawowe metody blokowe, oferowane przez standardową bibliotekę języka Ruby, okazują się w danym zastosowaniu niewystarczające. Chcielibyśmy zdefiniować własne metody klasyfikowania elementów stanowiących wynik enumeracji (jak Enumerable#detect czy Enumerable#find_all) i kolekcjonowania tych elementów (jak Enumerable#collect).

Rozwiązanie

Metodę dokonującą przeszukiwania lub klasyfikowania elementów będących wynikiem enumeracji najłatwiej jest zaimplementować za pomocą iteratora inject. W ten sposób łatwo można stworzyć własne wersje metod w rodzaju detect i find_all:

module Enumerable def find_no_more_than(limit) inject([]) do |a,e| a << e if yield e return a if a.size ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.