Stateless iterators
Schrijf stateless iterators zoals ipairs en implementeer aangepaste varianten
Stateless iterators is een gratis Lua Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
Wat is een toestandsloze iterator?
Een toestandsloze iterator heeft geen interne toestand. Alle informatie wordt bij elke aanroep als argument doorgegeven: de onveranderlijke toestand en de huidige besturingsvariabele.
ipairs: het standaardvoorbeeld
ipairs is toestandsloos — het gebruikt de tabel als toestand en de huidige index als besturingsvariabele.
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 dosquares-iterator
Een toestandsloze iterator die opeenvolgende kwadraten retourneert. De toestand bevat de limiet en de besturingsvariabele is het huidige getal.
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)
endGeen closure nodig
Toestandsloze iterators vermijden het maken van closures. Omdat alle toestand als argument wordt doorgegeven, vindt er per iteratie geen heaptoewijzing plaats.
Een pairs-achtige iterator implementeren
Een toestandsloze sleutel-waarde-iterator die next als iteratorfunctie gebruikt — precies zoals pairs werkt.
for k, v in next, {a=1, b=2} do
print(k, v)
endnext-functie
next(t, k) retourneert het volgende sleutel-waardepaar na sleutel k. Geef nil door (of laat het weg) om aan het begin te beginnen.
local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)Aangepaste bereikiterator
Een toestandsloze bereikiterator met een stapgrootte. De toestand bevat een configuratietabel; de besturing is de huidige waarde.
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)
endPrestatievoordeel
Toestandsloze iterators zijn ideaal voor krappe lussen. Per aanroep wordt geen closure gemaakt, waardoor ze sneller zijn dan iterators met toestandsvolle closures voor eenvoudige doorlopen.
Beperkingen
Wanneer iteratie een complexe toestand vereist (meerdere tellers, wachtrijen of dynamische gegevens), worden toestandsloze iterators onhandig. Gebruik in plaats daarvan iterators met toestandsvolle closures of coroutines.
Combineren met table.move
Een toestandsloze slice-iterator retourneert elementen uit een tabelsegment. De onveranderlijke toestand bevat de array en eindindex; de besturing is de huidige index.
Toestandsloze iterators in de standaardbibliotheek
ipairs, pairs (via next) en string.gmatch gebruiken intern toestandsloze of vrijwel toestandsloze ontwerpen.
Vraag over toestandsloze iterators
Waardoor is een iterator toestandsloos?
Samenvatting: toestandsloze iterators
Toestandsloze iterators ontvangen alle context als argumenten, vereisen geen toewijzing van closures en leveren zeer goede prestaties. Ze zijn ideaal voor eenvoudige opeenvolgende doorlopen, zoals array-indexering.
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Stateless iterators” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Stateless iterators”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “Stateless iterators”?
Schrijf stateless iterators zoals ipairs en implementeer aangepaste varianten Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Stateless iterators”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Het generieke-forprotocol
- Stateless iterators
- Stateful iterators met closures
- Generators op basis van coroutines