Ruby Academy · leksjon

Enumerator-objekter

Ekstern iterasjon

Leksjon 4 av 413 trinn

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.next

Hent 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.class

Hent 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.next

StopIteration 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"
end

peek 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.next

Bygg 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.next

Uendelige 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}"
end

Returner 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.next

Sett det hele sammen

Enumerator-objekter gir deg detaljert kontroll:

  • Hent verdier med next, se på neste verdi med peek, eller start på nytt med rewind.
  • Bygg egendefinerte objekter med Enumerator.new og en yielder.
  • De er Enumerable, så map, select og take fungerer.
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, peek og rewind.
  • StopIteration signaliserer 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.next
Gratis å komme i gang

Læ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

  1. Skrive egen each
  2. Inkludere Enumerable
  3. Late enumeratorer
  4. Enumerator-objekter
← Tilbake til Ruby Academy