Lua Academy · Oppitunti

Tilattomat iteraattorit

Kirjoittakaa tilattomia iteraattoreita, kuten ipairs, ja toteuttakaa omia muunnelmia.

Oppitunti 2/413 vaihetta

Tilattomat iteraattorit on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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 Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on tilaton iteraattori?

Tilaton iteraattori ei sisällä sisäistä tilaa. Kaikki tiedot välitetään argumentteina jokaisella kutsulla: muuttumaton tila ja nykyinen ohjausmuuttuja.

ipairs: kanoninen esimerkki

ipairs on tilaton: se käyttää taulua tilana ja nykyistä indeksiä ohjausmuuttujana.

local function myIpairs(t, i)
  i = i + 1
  local v = t[i]
  if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 do

squares-iteraattori

Tilaton iteraattori, joka palauttaa peräkkäisiä neliölukuja. Tila sisältää raja-arvon ja ohjausmuuttuja nykyisen luvun.

local function squaresIter(max, n)
  n = n + 1
  if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
  print(n, sq)
end

Sulkeumaa ei tarvita

Tilattomat iteraattorit välttävät sulkeumien varaamisen. Koska kaikki tila välitetään argumentteina, iteraatiota kohden ei varata lainkaan kekomuistia.

pairs-tyylisen iteraattorin toteuttaminen

Tilaton avain-arvo-iteraattori, joka käyttää next-funktiota iteraattorifunktiona — täsmälleen samalla tavalla kuin pairs.

for k, v in next, {a=1, b=2} do
  print(k, v)
end

next-funktio

next(t, k) palauttaa avaimen k jälkeisen seuraavan avain-arvo-parin. Välittäkää nil (tai jättäkää se pois), jos haluatte aloittaa alusta.

local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)

Mukautettu välialueiteraattori

Tilaton askelta käyttävä välialueiteraattori. Tila sisältää asetustaulukon ja ohjausmuuttuja nykyisen arvon.

local function rangeIter(state, n)
  n = n + state.step
  if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
  print(v)
end

Suorituskykyetu

Tilattomat iteraattorit sopivat erinomaisesti tiiviisiin silmukoihin. Jokaisella kutsulla ei luoda uutta sulkeumaa, joten ne ovat yksinkertaisissa läpikäynneissä nopeampia kuin tilalliset sulkeumaimeraattorit.

Rajoitukset

Kun iteraatio edellyttää monimutkaista tilaa, kuten useita laskureita, jonoja tai dynaamista dataa, tilattomista iteraattoreista tulee hankalia. Käyttäkää sen sijaan tilallisia sulkeumaimeraattoreita tai korutiineja.

Yhdistäminen table.moveen

Tilaton viipaleiteraattori palauttaa taulukon osan alkioita. Muuttumaton tila sisältää taulukon ja loppuindeksin, ja ohjausmuuttuja on nykyinen indeksi.

Vakiokirjaston tilattomat iteraattorit

ipairs, pairs (next-funktion kautta) ja string.gmatch käyttävät sisäisesti tilattomia tai lähes tilattomia rakenteita.

Tilatonta iteraattoria koskeva kysymys

Mikä tekee iteraattorista tilattoman?

Kertaus: tilattomat iteraattorit

Tilattomat iteraattorit saavat kaiken kontekstin argumentteina, eivät tarvitse sulkeuman varaamista ja ovat erittäin suorituskykyisiä. Ne sopivat ihanteellisesti yksinkertaisiin peräkkäisiin läpikäynteihin, kuten taulukon indeksointiin.

Aloita maksutta

Opi Lua 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
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Tilattomat iteraattorit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tilattomat iteraattorit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tilattomat iteraattorit”?

Kirjoittakaa tilattomia iteraattoreita, kuten ipairs, ja toteuttakaa omia muunnelmia. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Tilattomat iteraattorit”-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ä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua 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

  1. Geneerisen for-rakenteen protokolla
  2. Tilattomat iteraattorit
  3. Tilalliset iteraattorit sulkeumilla
  4. Korutiinipohjaiset generaattorit
← Takaisin: Lua Academy