Enumerator-objekter
Ekstern iterasjon
Enumerator-objekter er en gratis leksjon i Ruby Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ruby Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ruby Academy inneholder totalt 4 leksjoner.
Ekstern iterasjon
En Enumerator er et objekt som representerer en iterasjon. Den støtter ekstern iterasjon: du henter verdier én om gangen med next, i stedet for å sende en blokk til each.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextHent en Enumerator
Kall en iteratormetode som each uten blokk, så mottar du en Enumerator i stedet for at iterasjonen kjøres.
enum = [1, 2, 3].each
puts enum.classHent verdier med next
next returnerer det neste elementet hver gang du kaller den. Enumeratoren husker hvor den befinner seg.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration på slutten
Når det ikke er flere verdier igjen, utløser next StopIteration. Du kan håndtere unntaket med rescue for å avslutte på en ryddig måte.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endpeek og rewind
peek ser på den neste verdien uten å gå videre; rewind tilbakestiller til begynnelsen.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextBygg egendefinerte enumeratorer
Opprett din egen med Enumerator.new. Blokken mottar en yielder y; send inn verdier med y << eller y.yield.
evens = Enumerator.new do |y|
n = 0
loop do
y << n
n += 2
end
end
puts evens.next
puts evens.next
puts evens.nextUendelige enumeratorer
Fordi de er pull-baserte, kan egendefinerte enumeratorer være uendelige. Du henter bare det du trenger.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Enumeratorer er Enumerable
En Enumerator inkluderer Enumerable, så alle de vanlige metodene (map, select, take) fungerer også. Dermed kan du kombinere intern og ekstern iterasjon.
fib = Enumerator.new do |y|
a, b = 0, 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(8)with_index
with_index knytter en indeks til enhver Enumerator, og du kan valgfritt angi et egendefinert starttall.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endReturner en Enumerator fra each
I dine egne klasser returnerer du to_enum(:each) (eller enum_for) når ingen blokk er oppgitt, slik at den som kaller metoden, kan iterere eksternt.
class Trio
def each
return to_enum(:each) unless block_given?
yield 1; yield 2; yield 3
end
end
e = Trio.new.each
puts e.next
puts e.nextSett det hele sammen
Enumerator-objekter gir deg detaljert kontroll:
- Hent verdier med
next, se på neste verdi medpeek, eller start på nytt medrewind. - Bygg egendefinerte objekter med
Enumerator.newog en yielder. - De er Enumerable, så
map,selectogtakefungerer.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)Hurtigsjekk
Test forståelsen Deres av Enumerator-objekter.
Oppsummering
De har lært om Enumerator-objekter:
- Ekstern iterasjon via
next,peekogrewind. StopIterationsignaliserer slutten.- Bygg egendefinerte objekter med
Enumerator.new { |y| ... }. - De er Enumerable og kan være uendelige.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextLær deg Ruby med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 29
- Leksjoner
- 109
Ofte stilte spørsmål
Er leksjonen «Enumerator-objekter» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ruby Academy, inkludert «Enumerator-objekter», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Ruby Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Enumerator-objekter»?
Ekstern iterasjon Du øver på Ruby Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Ruby Academy?
Ingen tidligere erfaring er nødvendig. Ruby Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Enumerator-objekter»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Ruby Academy-leksjonen?
Ja. Alle Ruby Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Skrive egen each
- Inkludere Enumerable
- Late enumeratorer
- Enumerator-objekter