Enumerator-oliot
Ulkoinen iteraatio.
Enumerator-oliot on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Ulkoinen iteraatio
Enumerator on iteraatiota edustava olio. Se tukee ulkoista iteraatiota: noudat arvot yksi kerrallaan next-metodilla sen sijaan, että välittäisit lohkon each-metodille.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextEnumeraattorin hankkiminen
Kutsu iteraattorimetodia, kuten each-metodia, ilman lohkoa, niin saat suorituksen sijaan Enumerator-olion.
enum = [1, 2, 3].each
puts enum.classArvojen noutaminen next-metodilla
next palauttaa seuraavan alkion jokaisella kutsukerralla. Enumerator muistaa sijaintinsa.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration lopussa
Kun arvot loppuvat, next nostaa StopIteration-poikkeuksen. Voit käsitellä sen rescue-lauseella lopettaaksesi hallitusti.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endpeek ja rewind
peek tarkastelee seuraavaa arvoa etenemättä, ja rewind palauttaa aloituskohtaan.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextMukautettujen enumeraattorien rakentaminen
Luo oma enumeraattori komennolla Enumerator.new. Lohko vastaanottaa yielder-olion y; työnnä arvoja käyttämällä y <<- tai y.yield-toimintoa.
evens = Enumerator.new do |y|
n = 0
loop do
y << n
n += 2
end
end
puts evens.next
puts evens.next
puts evens.nextÄärettömät enumeraattorit
Koska mukautetut Enumerator-oliot perustuvat arvojen noutamiseen, ne voivat olla äärettömiä. Otat niistä vain tarvitsemasi arvot.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Enumeratorit ovat Enumerable-olioita
Enumerator sisältää Enumerable-mixin, joten kaikki tavalliset metodit, kuten map, select ja take, toimivat myös. Näin sisäinen ja ulkoinen iteraatio voidaan yhdistää.
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 liittää indeksin mihin tahansa Enumerator-olioon. Aloitusindeksiksi voi halutessaan määrittää mukautetun numeron.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endEnumeraattorin palauttaminen each-metodista
Palauta omissa luokissasi to_enum(:each) (tai enum_for), kun lohkoa ei anneta, jotta kutsujat voivat iteroida ulkoisesti.
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.nextKootaan kaikki yhteen
Enumerator-oliot antavat tarkan hallinnan:
- Hakekaa arvoja
next-menetelmällä, kurkistakaa seuraavaa arvoa tai kelatkaa alkuun. - Luokaa mukautettuja olioita
Enumerator.new-menetelmällä ja yielder-olion avulla. - Ne ovat Enumerable-olioita, joten map-, select- ja take-menetelmät toimivat niiden kanssa.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)Pikatarkistus
Testatkaa, miten hyvin ymmärrätte Enumerator-oliot.
Kertaus
Opitte käyttämään Enumerator-olioita:
- Ulkoiseen iterointiin menetelmillä
next,peekjarewind. StopIterationilmaisee lopun.- Luokaa mukautettuja olioita muodolla
Enumerator.new { |y| ... }. - Ne ovat Enumerable-olioita ja voivat olla rajattomia.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextOpi Ruby tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”Enumerator-oliot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Enumerator-oliot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Enumerator-oliot”?
Ulkoinen iteraatio. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Enumerator-oliot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Mukautetun each-metodin kirjoittaminen
- Enumerable-moduulin sisällyttäminen
- Laiskat enumeratorit
- Enumerator-oliot