Ruby Language
Liczniki
Szukaj…
Wprowadzenie
Moduł Enumerator
to obiekt, który implementuje iterację w kontrolowany sposób.
Zamiast zapętlać, dopóki jakiś warunek nie zostanie spełniony, obiekt wylicza wartości w razie potrzeby. Wykonanie pętli zostaje wstrzymane, dopóki właściciel obiektu nie zażąda następnej wartości.
Liczniki umożliwiają nieskończone strumienie wartości.
Parametry
Parametr | Detale |
---|---|
yield | Odpowiada na yield , która jest aliasowana jako << . Poddanie się temu obiektowi implementuje iterację. |
Niestandardowe moduły wyliczające
Enumerator
dla liczb Fibonacciego .
fibonacci = Enumerator.new do |yielder|
a = b = 1
loop do
yielder << a
a, b = b, a + b
end
end
Możemy teraz użyć dowolnej metody Enumerable
z fibonacci
:
fibonacci.take 10
# => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Istniejące metody
Jeśli metoda iteracyjna, taka jak each
jest wywoływana bez bloku, należy zwrócić Enumerator
.
Można to zrobić za pomocą metody enum_for
:
def each
return enum_for :each unless block_given?
yield :x
yield :y
yield :z
end
Umożliwia to programiście tworzenie operacji Enumerable
:
each.drop(2).map(&:upcase).first
# => :Z
Przewijanie
Użyj rewind
do rewind
aby zrestartować moduł wyliczający.
ℕ = Enumerator.new do |yielder|
x = 0
loop do
yielder << x
x += 1
end
end
ℕ.next
# => 0
ℕ.next
# => 1
ℕ.next
# => 2
ℕ.rewind
ℕ.next
# => 0
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow