Protokollen for generisk for
Forstå iteratorprotokollen med tre verdier: iteratทำorfunksjon, tilstand og kontrollvariabel.
Protokollen for generisk for er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 1 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 Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Slik fungerer generic for
for-setningen kaller en iteratorfunksjon ved hver iterasjon. Den sender med en tilstand og en kontrollvariabel, og stopper når funksjonen returnerer nil.
Retur av tre verdier
for var in iter, state, init do – Lua pakker dette ut som: iteratorfunksjonen iter, invariant tilstand state og innledende kontrollvariabel init.
ipairs-protokollen
ipairs(t) returnerer en tilstandsløs iteratorfunksjon, tabellen som tilstand og 0 som innledende kontrollvariabel. Hvert kall returnerer neste indeks og verdi.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endTilpasset iterator med tre verdier
Implementer en tilpasset tilstandsløs iterator ved å oppgi alle tre verdiene eksplisitt.
local function iter(t, i)
i = i + 1
local v = t[i]
if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
print(i, v)
endForenkling med en lukking
En lukkingbasert iterator trenger bare å returnere iteratorfunksjonen (ingen tilstand eller kontrollvariabel er nødvendig – de ligger i upvalues).
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({1,2,3}) do print(v) endnil avslutter løkken
Den generiske for-løkken avsluttes så snart iteratorfunksjonen returnerer nil som den første returverdien. Dette er avslutningskontrakten.
Flere returverdier
Iteratoren kan returnere flere verdier, og hver verdi tilordnes en løkkevariabel: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endBruk av tilstandsparameteren
Tilstandsparameteren sendes uendret til hvert iteratorkall. For tilstandsløse iteratorer inneholder den all nødvendig kontekst (for eksempel selve tabellen).
Coroutine.wrap som iterator
coroutine.wrap(fn) returnerer en funksjon som gjenopptar korutinen ved hvert kall. Verdier som gis med yield, blir returverdier – perfekt som iterator i en generisk for-løkke.
local function countdown(n)
return coroutine.wrap(function()
for i = n, 1, -1 do coroutine.yield(i) end
end)
end
for v in countdown(5) do print(v) endSammensetting av iteratorer
Iteratorer kan settes sammen: pakk én iterator inn i en annen for å legge til filtrering eller transformasjon.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endUendelige iteratorer
En iterator som aldri returnerer nil, oppretter en uendelig løkke. Oppgi alltid en avslutningsbetingelse eller break.
local function naturals()
local n = 0
return function() n = n+1; return n end
end
for v in naturals() do
if v > 5 then break end
print(v)
endSpørsmål om generic for
Når stopper den generiske for-løkken?
Oppsummering: Protokollen for generic for
Den generiske for-løkken kaller en iteratorfunksjon med invariant tilstand og kontrollvariabel. Den stopper ved nil. Lukkinger forenkler tilstandsfulle iteratorer ved å lagre tilstanden i upvalues.
Lær deg Lua 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
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Protokollen for generisk for» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Protokollen for generisk for», 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 Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Protokollen for generisk for»?
Forstå iteratorprotokollen med tre verdier: iteratทำorfunksjon, tilstand og kontrollvariabel. Du øver på Lua 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 Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua 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 1 av 4.
Hvor lang tid tar leksjonen «Protokollen for generisk for»?
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 Lua Academy-leksjonen?
Ja. Alle Lua 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
- Protokollen for generisk for
- Tilstandsløse iteratorer
- Tilstandsfulle iteratorer med closures
- Coroutine-baserte generatorer