Eine Liste ausgeben
Was passiert, wenn du eine ganze Liste ausgibst?
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
print(pflanzen)Das gibt etwa Folgendes aus:
table: 0x109008Statt der Elemente gibt Lua den Typ aus, table, und eine hexadezimal geschriebene Zahl (mit den Ziffern 0 bis 9 und den Buchstaben a bis f). Das ist die Adresse der Tabelle, der Ort im Speicher des Computers, an dem die Tabelle liegt. Sie ist nur nützlich, um zwei Tabellen zu unterscheiden, und sie kann bei jedem Start des Programms anders sein. Eine Liste mit einem Text zu verbinden funktioniert auch nicht: "Pflanzen: " .. pflanzen endet mit attempt to concatenate a table value (local 'pflanzen').
Um die Elemente auszugeben, verbinde sie mit table.concat zu einem Text. Das erste Argument ist die Liste, das zweite der Text, der zwischen die Elemente kommt, das Trennzeichen:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
print(table.concat(pflanzen, ", "))
print("Pflanzen: " .. table.concat(pflanzen, ", "))
print(table.concat(pflanzen, " | "))
print(table.concat(pflanzen))Das gibt Folgendes aus:
Karotte, Kartoffel, Kürbis
Pflanzen: Karotte, Kartoffel, Kürbis
Karotte | Kartoffel | Kürbis
KarotteKartoffelKürbisDas Trennzeichen steht nur zwischen den Elementen, nicht nach dem letzten. Ohne Trennzeichen werden die Elemente aneinandergeklebt. Das Ergebnis ist ein gewöhnlicher Text, du kannst ihn also mit anderen Texten verbinden oder in einer Variablen speichern. Für eine leere Liste gibt table.concat einen leeren Text.
Die Elemente können Texte und Zahlen sein, aber nichts anderes. Bei jedem anderen Wert, zum Beispiel true, sagt die Fehlermeldung, welches Element falsch ist:
print(table.concat({"Karotte", true, "Kürbis"}, ", "))main.lua:1: invalid value (boolean) at index 2 in table for 'concat'Manchmal brauchst du mehr als die Elemente selbst, zum Beispiel die Zahl der Tage neben jeder Pflanze. Dann baue in einer Schleife eine neue Liste von Texten und verbinde sie am Ende:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
local tage = {3, 4, 7}
local etiketten = {}
for i, pflanze in ipairs(pflanzen) do
etiketten[#etiketten + 1] = pflanze .. " (" .. tage[i] .. " Tage)"
end
print(table.concat(etiketten, ", "))Das gibt Folgendes aus:
Karotte (3 Tage), Kartoffel (4 Tage), Kürbis (7 Tage)Du kannst die Elemente auch in einer Schleife mit io.write ausgeben, wie in der Lektion über Schleifen. Dann musst du dich selbst um das Trennzeichen kümmern: Es steht vor jedem Element außer dem ersten.
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
for i, pflanze in ipairs(pflanzen) do
if i > 1 then
io.write(", ")
end
io.write(pflanze)
end
print()Das gibt Folgendes aus:
Karotte, Kartoffel, KürbisDas print() am Ende beendet die Zeile. table.concat erledigt das alles in einer einzigen Zeile.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus: Es gibt die Adresse der Tabelle aus und nicht die Waren. Ändere die letzte Zeile so, dass sie die Waren mit
table.concatausgibt:Zu verkaufen: Karotten, Kartoffeln, Kürbisse, Eier. - 2
Erzeuge darunter eine leere lokale Liste
etiketten. Gehe dannwarenin einer Schleife durch und hänge für jedes Element einen Text wieKarotten (12)ans Ende vonetiketten: die Ware, ein Leerzeichen und die Menge ausmengenin Klammern. - 3
Gib nach der Schleife
etikettenmittable.concataus:Heute: Karotten (12), Kartoffeln (8), Kürbisse (3), Eier (30).