Generische for-Schleife und break
Verwenden Sie generische for-Schleifen mit pairs/ipairs und steuern Sie den Schleifenablauf mit break
Generische for-Schleife und break ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Protokoll der generischen for-Schleife
Luas generische for-Schleife arbeitet mit einer Iteratorfunktion. Die Syntax lautet for vars in iter_func, state, init do. Bei jeder Iteration ruft Lua iter_func(state, lastVar) auf und weist die Rückgabewerte den Variablen vars zu. Die Schleife endet, wenn der erste Rückgabewert nil ist.
-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil) -- first entry
while key ~= nil do
print(key, val)
key, val = next(t, key) -- advance
endpairs() für alle Schlüssel
pairs(t) gibt einen Iterator zurück, der alle Schlüssel-Wert-Paare einer Tabelle durchläuft, einschließlich String-Schlüsseln, Ganzzahlschlüsseln und gemischten Schlüsseln. Die Reihenfolge für Schlüssel, die keine Ganzzahlen sind, ist nicht festgelegt (Hash-Reihenfolge). Sowohl der Array- als auch der Hash-Teil werden berücksichtigt.
local config = {
host = "localhost",
port = 8080,
debug = true,
[1] = "first",
}
for key, value in pairs(config) do
print(key, value)
end
-- Prints all 4 entries in any orderipairs() für Array-Schlüssel
ipairs(t) durchläuft Ganzzahlschlüssel ab 1 und endet beim ersten nil-Wert. Die Funktion ist sicher, vorhersehbar und erhält die Reihenfolge. Verwenden Sie ipairs für arrayähnliche Tabellen, wenn die Reihenfolge wichtig ist und Sie beim ersten Loch stoppen möchten.
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
print(i, v) -- only 1,10 and 2,20
endpairs und ipairs im Vergleich
Sie sollten wissen, wann welches Verfahren geeignet ist: ipairs ist für geordnete, fortlaufende Arrays gedacht, pairs für Wörterbücher oder gemischte Tabellen. ipairs stoppt beim ersten nil-Loch, pairs besucht jeden Schlüssel mit einem Wert. Für reine Arrays ist ipairs idiomatischer.
local mixed = {10, 20, key="val", 30}
-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
print(i, v) -- 1:10, 2:20, 3:30
end
-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
print(k, v) -- 1:10, 2:20, 3:30, key:val
endBenutzerdefinierter Iterator mit Closure
Sie können Ihren eigenen Iterator als Closure schreiben. Die Factory-Funktion gibt eine zustandsbehaftete Closure zurück, die ihre Position bei jedem Aufruf weiterführt. Wenn keine Werte mehr vorhanden sind, gibt sie nil zurück und beendet damit die generische for-Schleife.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for n in range(1, 10, 2) do
io.write(n .. " ")
end
print() -- 1 3 5 7 9string.gmatch als Iterator
string.gmatch(s, pattern) gibt einen Iterator über alle Vorkommen des Musters im String s zurück. Die Funktion wird häufig verwendet, um Strings zu teilen, Tokens zu extrahieren oder alle Vorkommen eines Musters zu finden.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- foxbreak in generischen for-Schleifen
Sie können eine generische for-Schleife mit break vorzeitig verlassen. Das ist für die Suche nützlich: Iterieren Sie, bis eine Übereinstimmung gefunden wurde, und verwenden Sie dann break. Nach dem Verlassen wird die Ausführung mit der Anweisung nach end fortgesetzt.
local inventory = {
{name="sword", damage=50},
{name="shield", armor=30},
{name="bow", damage=35},
}
local target = "shield"
for i, item in ipairs(inventory) do
if item.name == target then
print("Found at index", i)
break
end
endTabellen während der Iteration ändern
Fügen Sie niemals Schlüssel in eine Tabelle ein und entfernen Sie niemals Schlüssel daraus, während Sie mit pairs() iterieren – das Verhalten ist undefiniert (manche Änderungen werden möglicherweise erkannt, andere übersprungen). Wenn Sie eine Tabelle ändern müssen, sammeln Sie die Änderungen in einer temporären Liste und wenden Sie sie nach der Schleife an.
local t = {a=1, b=2, c=3, d=4}
local toDelete = {}
-- Collect keys to delete
for k, v in pairs(t) do
if v % 2 == 0 then
toDelete[#toDelete+1] = k
end
end
-- Delete after iteration
for _, k in ipairs(toDelete) do
t[k] = nil
end
-- t = {a=1, c=3}Enumerationsmuster
Wenn Sie sowohl den Index als auch den Wert benötigen, verwenden Sie ipairs, das beides bereitstellt. Wenn Sie nur die Werte benötigen und der Index keine Rolle spielt, können Sie _ als üblichen Variablennamen für „nicht relevant“ verwenden.
local colors = {"red", "green", "blue"}
-- With index
for i, color in ipairs(colors) do
print(i .. ": " .. color)
end
-- Ignore index with _
for _, color in ipairs(colors) do
print(color) -- just the values
endnext() direkt verwenden
next(t, key) ist die zugrunde liegende Traversierungsfunktion. Sie gibt das Schlüssel-Wert-Paar nach key zurück oder nil, wenn keine weiteren Einträge vorhanden sind. next(t, nil) gibt den ersten Eintrag zurück. Mit next(t) ~= nil können Sie prüfen, ob eine Tabelle nicht leer ist – schneller als das Zählen.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- falseKurztest
Welcher Iterator stoppt beim ersten nil-Loch in einer Tabelle?
Zusammenfassung: Generische for-Schleifen und break
Zusammenfassung:
pairs(t)– alle Schlüssel, beliebige Reihenfolgeipairs(t)– Ganzzahlschlüssel 1..n, geordnet, stoppt bei nil- Benutzerdefinierte Iteratoren: Eine Closure zurückgeben, die zum Beenden nil zurückgibt
breakbeendet die Schleife vorzeitig- Ändern Sie eine Tabelle niemals während einer pairs-Iteration; sammeln Sie Änderungen und wenden Sie sie danach an
next(t) == nil– schnelle Prüfung auf eine leere Tabelle
Lerne Lua mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 40
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Generische for-Schleife und break“ kostenlos?
Ja — der vollständige Text von „Generische for-Schleife und break“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Generische for-Schleife und break“?
Verwenden Sie generische for-Schleifen mit pairs/ipairs und steuern Sie den Schleifenablauf mit break Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Generische for-Schleife und break“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- if-, elseif- und else-Anweisungen
- while- und repeat-until-Schleifen
- Numerische for-Schleife
- Generische for-Schleife und break