Lua: Tables
Lua |
---|
Basics |
Intermediate |
Advanced |
|
XLua |
Add to this template |
Tables are the only real complex data structure provided in Lua. Tables are basically arrays, specifically associative arrays, associating a key with a corresponding value. Unlike most languages, Lua's tables start at 1 instead of 0. Lua tables can store every other data type, and even mixed types. The following is a valid table:
table1 = { key = "test", -- defines 'key' and assigns 'test' to it [3] = 5, -- assigns '5' to index 3 ["what"] = true, table2 = { }, -- creates a subtable in this table testfunc = function(arg) return 10 end, -- this way of defining functions must be used in tables not_here = nil, -- this value does not exist [0] = "skipped", -- allowed but more or less ignored by default functions }
Values in tables can be accessed in a few ways. One way is via dot syntax: table1.key will return test. Another is by specifying an integer index: table1[3] will return 5, not true, as 5 was explicitly stored in '[3]'. Strings can also used within square brackets: table1["what"] is exactly the same as table1.what, but does allow you to evaluate a string within the brackets.
Functions inside tables can called in various ways; remember, they are variables, after all. table1.testfunc(arg) and table1["testfunc"](arg) are two valid ways to call a function. Functions are also able to use colon syntax, which effectively gives Lua OO capabilities. table1:testfunc(arg) is the same as table1.testfunc(table1, arg).
Metatables are normal Lua tables that can be "attached" to other tables. They allow you to define otherwise undefined behavior: normally, adding two tables would result in an error. However, metatables allow you to define exactly how tables should be added, which would make adding tables a valid operation.