Data
Mostly tables
Lua is a dynamically typed language. Variables doesn't have any types but the value's does. So a variable can have a string assigned to it and next we can assign a table to it.
Variables
There are three kind of variables, Global Variables, Local variables and table fields.
Global: The default.
Local: Create a local variable by using the local keyword in front of declaration. If no value is assigned it will be initialized to nil.
Field: With a table a variable can be assigned with t[k] = v. Lua handle t.k = v the same as t["k"] = v.
Types
nil
boolean
number
string
function
This can be a lua or a c function.
userdata
This is used to store arbitrary c data in lua variables. It's a raw block of memory. There are two kinds of user data, full userdata and light userdata.
Full userdata
This is a block of memory managed by lua. It can not be created or modified in lua so it must be done through the C API. To create it use lua_newuserdata. It can have metatables and be garbage collected.
Light userdata
This is like a C pointer value. To put it on the stack use lua_pushlightuserdata.
thread
table
A table is a array that can be indexed by any value exept nil. They can also contain any type of value except nil.
Metatables and Metamethods
Each value in lua may have a metatable.
Tables and userdata have invidual metatable, other types share one single metatable for all values of that type.
Any table can be the metatable of any value, including itself.
From Lua it is only possible to set metatables on tables. All values of other types it muse be modified from C.
Arithmetic Metamethods
__add
__sub
__mul
__div
__mod
__pow
__unm
__idiv
Bitwise Metamethods
__band
__bor
__bxor
__bnot
__shl
__shr
Relational Metamethods
__eq
__lt
__le
Table-Access Metamethods
__index: One use for this is inheritance. The instance can have the class as a metatable and it can point the index to itself. That way anything one try to access not in the instance will be looked up in the class.
__newindex: The indexing assignment table[key] = value.
__call: One use for this event is to use it on a class like object so you can create a new instance on the class by calling it.
Library Metamethods
__tostring
__metatable
Other
__concat
__len
__gc