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.
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.
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.
__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.