Wpis z mikrobloga

Ktoś mi powie po cholerę są Enumerable w językach skryptowych #webdev ? Chodzi mi o język #ruby jednak w innych skryptowych też pewnie są. Rozumiem, że służą do tego, żebym mógł sobie np. "wygodniej" operować na tablicach czy hashach ale po cholerę mam zamieniać tablicę czy hash na enumerable? W jedynym i drugim przypadku zrobię to samo tylko za pomocą enumerable jest to o wiele trudniejsze i bardziej zawiłe.
  • 6
@mastopiron Enumerator to nie Enumerable. W większości przypadków faktycznie wystarczy jakaś standardwa kolekcja. Enumeratora warto użyć gdy masz jakiś nieskończony, albo taki którego każdy kolejny element jest kosztowny do obliczenia, zbiór wartości i potrzebujesz tylko lazy pobrać ileś z elementów. Np. jako wrapper na jakąś paginacje http, albo ciąg fibonnaciego (https://stackoverflow.com/a/6418868)
@ownadi:
czyli w gruncie rzeczy nie korzysta się z czegoś takiego jak Enumerator.new |y| i dalej pętla tylko robi się to operatorem lazy? Sorry za głupie pytanie ale szukam jakiegoś zastosowania bo inaczej mi to wypada z głowy
@mastopiron używa min. w sytuacjach które opisałem powyżej. Fibonacciego można by faktycznie czytelniej zaimplementować wywołując #lazy na range 1..INIFINITY, ale np przy paginacji http Enumerator.new to IMO najlepsza opcja. Załóżmy że API zwraca 10 wyników na stronę i jak masz odpowiedź opakowaną w Enumerator to możesz wywołać take(30) i dostaniesz 30 wyników wykonując tylko 3 requesty. Enumeratory fajnie działają z takimi metodami z Enumerable jak min. take, take_while, select czy detect, bo