Výpis seznamu
Co se stane, když vypíšete celý seznam?
local plodiny = {"mrkev", "brambory", "dýně"}
print(plodiny)Vypíše něco jako:
table: 0x109008Místo prvků vypíše Lua typ table a číslo zapsané v šestnáctkové soustavě (s číslicemi 0 až 9 a písmeny a až f). Je to adresa tabulky, tedy místo v paměti počítače, kde tabulka je. Hodí se jen k rozlišení dvou tabulek a při každém spuštění programu může vyjít jinak. Ani připojení seznamu k textu nefunguje: "Plodiny: " .. plodiny skončí chybou attempt to concatenate a table value (local 'plodiny').
Prvky vypíšete tak, že je funkcí table.concat spojíte do jednoho textu. Prvním argumentem je seznam, druhým text, který se vloží mezi prvky, tedy oddělovač:
local plodiny = {"mrkev", "brambory", "dýně"}
print(table.concat(plodiny, ", "))
print("Plodiny: " .. table.concat(plodiny, ", "))
print(table.concat(plodiny, " | "))
print(table.concat(plodiny))Vypíše:
mrkev, brambory, dýně
Plodiny: mrkev, brambory, dýně
mrkev | brambory | dýně
mrkevbramborydýněOddělovač se vkládá jen mezi prvky, ne za poslední. Bez oddělovače se prvky slepí dohromady. Výsledek je obyčejný text, takže ho můžete připojit k jiným textům nebo uložit do proměnné. Pro prázdný seznam dá table.concat prázdný text.
Prvky mohou být texty a čísla, nic jiného. U jakékoli jiné hodnoty, třeba true, chybová hláška řekne, který prvek je špatně:
print(table.concat({"mrkev", true, "dýně"}, ", "))main.lua:1: invalid value (boolean) at index 2 in table for 'concat'Někdy potřebujete víc než samotné prvky, třeba počet dní růstu u každé plodiny. Pak v cyklu sestavte nový seznam textů a ten na konci spojte:
local plodiny = {"mrkev", "brambory", "dýně"}
local dny = {3, 4, 7}
local popisky = {}
for i, plodina in ipairs(plodiny) do
popisky[#popisky + 1] = plodina .. " (dny: " .. dny[i] .. ")"
end
print(table.concat(popisky, ", "))Vypíše:
mrkev (dny: 3), brambory (dny: 4), dýně (dny: 7)Prvky můžete vypsat i v cyklu pomocí io.write, jako v lekci o cyklech. Pak se ale o oddělovač musíte postarat sami: patří před každý prvek kromě prvního.
local plodiny = {"mrkev", "brambory", "dýně"}
for i, plodina in ipairs(plodiny) do
if i > 1 then
io.write(", ")
end
io.write(plodina)
end
print()Vypíše:
mrkev, brambory, dýněprint() na konci ukončí řádek. table.concat tohle všechno zvládne na jednom řádku.
Jak psát:
Pokyny
Spusťte program: vypíše adresu tabulky, ne zboží. Změňte poslední řádek tak, aby vypsal zboží pomocí table.concat: Na prodej: mrkev, brambory, dýně, vejce.
Pod něj vytvořte prázdný lokální seznam popisky. Pak v cyklu projděte zbozi a pro každý prvek přidejte na konec seznamu popisky text jako mrkev (12): zboží, mezeru a množství ze seznamu mnozstvi v závorkách.
Za cyklem vypište popisky pomocí table.concat: Dnes: mrkev (12), brambory (8), dýně (3), vejce (30).
Začněte programovat zdarma
7/11