Protokół ogólnej pętli for
Proszę poznać trójwartościowy protokół iteratora: funkcję iteratora, stan i zmienną sterującą.
Protokół ogólnej pętli for to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Jak działa generic for
Instrukcja for wywołuje przy każdej iteracji funkcję iteratora. Przekazuje jej stan i zmienną sterującą, a kończy działanie, gdy funkcja zwróci nil.
Zwracanie trzech wartości
for var in iter, state, init do — Lua rozpakowuje to jako: funkcję iteratora iter, niezmienny stan state oraz początkową zmienną sterującą init.
Protokół ipairs
ipairs(t) zwraca bezstanową funkcję iteratora, tabelę jako stan oraz 0 jako początkową zmienną sterującą. Każde wywołanie zwraca następny indeks i wartość.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endWłasny iterator zwracający trzy wartości
Własny bezstanowy iterator można zaimplementować, jawnie dostarczając wszystkie trzy wartości.
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)
endUproszczenie za pomocą domknięcia
Iterator oparty na domknięciu musi zwracać tylko funkcję iteratora (stan ani zmienna sterująca nie są potrzebne — znajdują się w 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 kończy pętlę
Pętla generic for kończy się natychmiast, gdy funkcja iteratora zwróci nil jako pierwszą zwracaną wartość. Jest to warunek zakończenia iteracji.
Wiele zwracanych wartości
Iterator może zwracać wiele wartości; każda z nich jest przypisywana odpowiedniej zmiennej pętli: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endUżycie parametru stanu
Parametr stanu jest przekazywany bez zmian do każdego wywołania iteratora. W przypadku iteratorów bezstanowych zawiera cały wymagany kontekst (np. samą tabelę).
Coroutine.wrap jako iterator
coroutine.wrap(fn) zwraca funkcję, która przy każdym wywołaniu wznawia korutynę; wartości przekazane przez yield stają się wartościami zwracanymi — idealnie nadaje się jako iterator 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) endKompozycja iteratorów
Iteratory można komponować: opakować jeden iterator w drugi, aby dodać filtrowanie lub transformację.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endNieskończone iteratory
Iterator, który nigdy nie zwraca nil, tworzy nieskończoną pętlę. Należy zawsze zapewnić warunek zakończenia lub użyć 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)
endPytanie o generic for
Kiedy pętla generic for się kończy?
Podsumowanie: protokół generic for
Generic for wywołuje funkcję iteratora z niezmiennym stanem i zmienną sterującą. Kończy działanie po otrzymaniu nil. Domknięcia upraszczają iteratory stanowe, zapisując stan w upvalues.
Często zadawane pytania
Czy lekcja „Protokół ogólnej pętli for” jest bezpłatna?
Tak — pełny tekst „Protokół ogólnej pętli for” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Protokół ogólnej pętli for”?
Proszę poznać trójwartościowy protokół iteratora: funkcję iteratora, stan i zmienną sterującą. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Protokół ogólnej pętli for”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Protokół ogólnej pętli for
- Iteratory bezstanowe
- Iteratory stanowe z domknięciami
- Generatory oparte na korutynach