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.


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.







This can be a lua or a c function.


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.



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









Bitwise Metamethods







Relational Metamethods




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