2.15. Generowanie sekwencji liczb
Problem
Zdefiniowana jest pewna sekwencja liczb (być może nieskończona), po której należy zorganizować iterację w taki sam sposób, jak iteruje się tablice lub zakresy.
Rozwiązanie
Tworzymy funkcję-generator, która za pomocą metody yield
udostępnia kolejne elementy generowanej sekwencji, na przykład tak:
def fibonacci(limit = nil) seed1 = 0 seed2 = 1 while not limit or seed2 <= limit yield seed2 seed1, seed2 = seed2, seed1 + seed2 end end fibonacci(3) { |x| puts x } # 1 # 1 # 2 # 3 fibonacci(1) { |x| puts x } # 1 # 1 fibonacci { |x| break if x > 20; puts x } # 1 # 1 # 2 # 3 # 5 # 8 # 13
Dyskusja
Generator sekwencji liczb funkcjonuje podobnie do iteratora tablicy lub innej struktury danych. W przeciwieństwie ...
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.