Il protocollo for generico
Comprenda il protocollo dell'iteratore a tre valori: funzione iteratore, stato e variabile di controllo.
Il protocollo for generico è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Come funziona il generic for
L’istruzione for chiama una funzione iteratore a ogni iterazione. Le passa uno stato e una variabile di controllo e si arresta quando la funzione restituisce nil.
Restituzione di tre valori
for var in iter, state, init do — Lua scompone questa istruzione in: funzione iteratore iter, stato invariabile state e variabile di controllo iniziale init.
Protocollo ipairs
ipairs(t) restituisce una funzione iteratore senza stato, la tabella come stato e 0 come variabile di controllo iniziale. Ogni chiamata restituisce l’indice e il valore successivi.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endIteratore personalizzato a tre valori
Implementi un iteratore personalizzato senza stato fornendo esplicitamente tutti e tre i valori.
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)
endSemplificare con una closure
Un iteratore basato su closure deve restituire solo la funzione iteratore (non servono stato né variabile di controllo, perché vivono negli upvalue).
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 termina il loop
Il loop generic for termina non appena la funzione iteratore restituisce nil come primo valore restituito. Questo è il contratto di terminazione.
Più valori restituiti
L’iteratore può restituire più valori; ciascuno viene assegnato a una variabile del loop: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endUtilizzo del parametro state
Il parametro state viene passato senza modifiche a ogni chiamata dell’iteratore. Negli iteratori senza stato contiene tutto il contesto necessario (ad esempio, la tabella stessa).
Coroutine.wrap come iteratore
coroutine.wrap(fn) restituisce una funzione che riprende la coroutine a ogni chiamata; i valori prodotti con yield diventano valori restituiti, rendendola perfetta come iteratore per un generic for.
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) endComposizione di iteratori
Gli iteratori possono essere composti: è possibile racchiudere un iteratore in un altro per aggiungere filtraggio o trasformazioni.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endIteratori infiniti
Un iteratore che non restituisce mai nil crea un loop infinito. Fornisca sempre una condizione di terminazione o utilizzi 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)
endDomanda sul generic for
Quando si arresta il loop generic for?
Riepilogo: protocollo generic for
Il generic for chiama una funzione iteratore con uno stato invariabile e una variabile di controllo. Si arresta quando riceve nil. Le closure semplificano gli iteratori con stato codificando lo stato negli upvalue.
Domande Frequenti
La lezione «Il protocollo for generico» è gratuita?
Sì — il testo completo di «Il protocollo for generico» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Il protocollo for generico»?
Comprenda il protocollo dell'iteratore a tre valori: funzione iteratore, stato e variabile di controllo. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Il protocollo for generico»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il protocollo for generico
- Iteratori senza stato
- Iteratori con stato tramite closure
- Generatori basati su coroutine