Iteratori senza stato
Scriva iteratori senza stato come ipairs e ne implementi varianti personalizzate.
Iteratori senza stato è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Che cos’è un iteratore senza stato?
Un iteratore senza stato non mantiene alcuno stato interno. Tutte le informazioni vengono passate come argomenti a ogni chiamata: lo stato invariabile e la variabile di controllo corrente.
ipairs: l’esempio canonico
ipairs non mantiene stato: utilizza la tabella come stato e l’indice corrente come variabile di controllo.
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 doIteratore squares
Un iteratore senza stato che restituisce quadrati successivi. Lo stato contiene il limite, mentre la variabile di controllo è il numero corrente.
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)
endNessuna closure necessaria
Gli iteratori senza stato evitano l’allocazione di closure. Poiché tutto lo stato viene passato come argomento, non viene effettuata alcuna allocazione nell’heap a ogni iterazione.
Implementare un iteratore in stile pairs
Un iteratore senza stato chiave-valore che utilizza next come funzione iteratore, esattamente come funziona pairs.
for k, v in next, {a=1, b=2} do
print(k, v)
endFunzione next
next(t, k) restituisce la coppia chiave-valore successiva alla chiave k. Passi nil (oppure ometta l’argomento) per iniziare dall’inizio.
local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)Iteratore personalizzato di intervalli
Un iteratore senza stato di intervalli con passo. Lo stato contiene una tabella di configurazione; il controllo è il valore corrente.
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)
endVantaggio in termini di prestazioni
Gli iteratori senza stato sono ideali per i loop intensivi. Non viene creata una closure a ogni chiamata, perciò sono più veloci degli iteratori con closure e stato nelle traversate semplici.
Limitazioni
Quando l’iterazione richiede uno stato complesso (più contatori, code o dati dinamici), gli iteratori senza stato diventano poco pratici. Utilizzi invece iteratori con closure e stato oppure coroutine.
Combinare con table.move
Un iteratore senza stato di una porzione restituisce gli elementi di una sezione di tabella. Lo stato invariabile contiene l’array e l’indice finale; il controllo è l’indice corrente.
Iteratori senza stato della libreria standard
ipairs, pairs (tramite next) e string.gmatch utilizzano internamente implementazioni senza stato o quasi senza stato.
Domanda sugli iteratori senza stato
Che cosa rende un iteratore privo di stato?
Riepilogo: iteratori senza stato
Gli iteratori senza stato ricevono tutto il contesto come argomenti, non richiedono l’allocazione di closure e offrono prestazioni elevate. Sono ideali per semplici traversate sequenziali, come l’indicizzazione di array.
Domande Frequenti
La lezione «Iteratori senza stato» è gratuita?
Sì — il testo completo di «Iteratori senza stato» è 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 «Iteratori senza stato»?
Scriva iteratori senza stato come ipairs e ne implementi varianti personalizzate. 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 2 di 4.
Quanto tempo richiede la lezione «Iteratori senza stato»?
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