Programming‎ > ‎Language‎ > ‎Lua‎ > ‎


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