Vnořené tabulky
Hodnotou v tabulce může být další tabulka a v té můžou být další tabulky. Tak popíšete něco většího, třeba celou farmu:
local farma = {
nazev = "farma Slunečnice",
mince = 120,
stodola = {vejce = 18, mleko = 6},
pole = {"mrkev", "brambory", "dýně"},
}
print(farma.stodola.vejce)
print(farma.pole[2])
print(#farma.pole)Vypíše:
18
brambory
3farma.stodola.vejce čtěte zleva doprava: farma.stodola je tabulka stodoly a .vejce z ní přečte klíč vejce. Tečky a hranaté závorky můžete řetězit, jak daleko potřebujete: farma.pole[2] je druhý prvek seznamu v klíči pole. Hodnotu změníte stejně: farma.stodola.vejce = farma.stodola.vejce + 6.
Vnitřní tabulky můžou být slovníky, seznamy i záznamy, smíchané, jak se vám hodí. Tady je slovník záznamů, jeden pro každé zvíře:
local zvirata = {
bella = {druh = "kráva", vek = 4},
rex = {druh = "pes", vek = 2},
}
print(zvirata.bella.druh .. ", " .. zvirata.bella.vek .. " roky")
print(zvirata.rex.druh)kráva, 4 roky
pesVnořovat jde i seznamy: pole se záhony po řádcích je seznam seznamů a zahony[2][3] je třetí záhon ve druhém řádku.
Typická chyba je čtení přes tabulku, která neexistuje. Řekněme, že Ema má nářadí v kůlně, ale farma ještě žádnou kůlnu nemá:
local farma = {nazev = "farma Slunečnice", stodola = {vejce = 18}}
print(farma.kulna.naradi)main.lua:3: attempt to index a nil value (field 'kulna')Index tu znamená přístup ke klíči tabulky pomocí tečky nebo hranatých závorek. farma.kulna je nil a z nil klíč naradi přečíst nejde. Hláška jmenuje klíč, který byl nil, tedy 'kulna': problém je v části před poslední tečkou, ne v naradi. Stejná chyba přijde i při přiřazení farma.kulna.naradi = 4: vnitřní tabulku za vás Lua nevytvoří. Vytvořte ji nejdřív sami:
local farma = {nazev = "farma Slunečnice", stodola = {vejce = 18}}
farma.kulna = {}
farma.kulna.naradi = 4
print(farma.kulna.naradi)4Nebo v jednom kroku: farma.kulna = {naradi = 4}. Když si nejste jistí, jestli vnitřní tabulka existuje, nejdřív to ověřte: if farma.kulna then … end, nebo v jednom výrazu farma.kulna and farma.kulna.naradi, což je bez kůlny nil místo chyby.
Jak psát:
Pokyny
Program skončí chybou: farma sama žádné mléko nemá, mléko je ve stodole. Opravte print, aby vypsal:
Mléko: 6 litrůNa farmu přibyla slepice Kropenka. Pod print ji pomocí table.insert přidejte do seznamu farma.zvirata jako záznam se jménem "Kropenka" a druhem "slepice". Pak seznam projděte pomocí ipairs a vypište každé zvíře:
kráva Bella
pes Rex
slepice KropenkaEma postavila kůlnu na své 4 kusy nářadí. Na konci programu přidejte do tabulky farma klíč kulna s tabulkou, která má klíč naradi s hodnotou 4. Pak vypište, s číslem přečteným pomocí farma.kulna.naradi:
Nářadí: 4Začněte programovat zdarma
8/10