Ihr Problem ist einfach:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
Dieser Code deklariert zuerst eine globale Variable namens names. Dann starten Sie eine for-Schleife. Die for-Schleife deklariert eine lokale Variable, die zufällig auch aufgerufen nameswird. Die Tatsache, dass zuvor eine Variable mit definiert wurde, namesist völlig irrelevant. Jede Verwendung namesinnerhalb der for-Schleife bezieht sich auf die lokale und nicht auf die globale Schleife .
Die for-Schleife besagt, dass der innere Teil der Schleife names = 1dann names = 2und schließlich aufgerufen wird names = 3. Die for-Schleife deklariert einen Zähler , der von der ersten bis zur letzten Zahl zählt, und ruft den inneren Code für jeden gezählten Wert einmal auf.
Was Sie eigentlich wollten, war ungefähr so:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Mit der Syntax [] greifen Sie auf die Mitglieder einer Lua-Tabelle zu. Lua-Tabellen ordnen "Schlüssel" "Werten" zu. Ihr Array erstellt automatisch Schlüssel vom Typ Integer, die sich erhöhen. Der mit "Joe" in der Tabelle verknüpfte Schlüssel ist also 2 (Lua-Indizes beginnen immer bei 1).
Daher benötigen Sie eine for-Schleife, die von 1 bis 3 zählt und die Sie erhalten. Mit der Variablen count können Sie aus der Tabelle auf das Element zugreifen.
Dies hat jedoch einen Fehler. Was passiert, wenn Sie eines der Elemente aus der Liste entfernen?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Jetzt bekommen wir John Joe nil, weil der Versuch, auf Werte aus einer Tabelle zuzugreifen, die nicht existieren, dazu führt nil. Um dies zu verhindern, müssen wir von 1 bis zur Länge der Tabelle zählen:
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
Das #ist der Längenoperator. Es funktioniert für Tabellen und Zeichenfolgen und gibt die Länge von beiden zurück. Egal wie groß oder klein es nameswird, dies wird immer funktionieren.
Es gibt jedoch eine bequemere Möglichkeit, eine Reihe von Elementen zu durchlaufen:
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairsist eine Lua-Standardfunktion, die eine Liste durchläuft. Dieser forSchleifenstil, der Iterator für die Schleife, verwendet diese Art von Iteratorfunktion. Der iWert ist der Index des Eintrags im Array. Der nameWert ist der Wert an diesem Index. Es macht also im Grunde eine Menge Grunzarbeit für dich.