In Lua, you can associate an additional table (known as a metatable) with each table of data and code you have. By doing so, repeated values and functions that apply across as whole series ("type", "class") of tables only have to be defined once. A very neat way for Lua to provide the OO facilities within a lightweight language.
Metatables are provided with a number of hooks, starting with __ (double underscore) which provide special functionallity / syntactic icing within the language; I believe that the following is a comprehensive list of them for Lua 5.2
__gc - finaliser (prior to garbage collection; the destructor)
__mode - setting keys or values to be weak
__add - addition
__sub - subtraction
__mul - multiplication
__div - division
__mod - modulo
__pow - raise to power
__unm - Unary Minus
__len - the # operator and the len function
__concat - concatenation (the .. operator)
__eq - equal
__lt - less than
__le - less than or equal
__index - Accessing a table element
__newindex - Creating a table element
__call - calling the code in a table element
__tostring - conversion to string (tostring and print)
__ipairs - the ipairs function
__pairs - the pairs function
__metatable - returns the metatable
See
The Lua 5.2 manual for details of each.
(written 2012-04-12)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
U107 - Object Orientation - the Lua way [1692] Towards Object Oriented Programming in Lua - (2008-06-30)
[1699] If you are learning Lua, here are some more examples - (2008-07-06)
[1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
[1819] Calling base class constructors - (2008-10-03)
[2318] For Lua Programmers AND for Town Planners - (2009-08-02)
[2359] A fresh example - objects the Lua way - (2009-08-13)
[2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
[2701] Is Lua an Object Oriented language? - (2010-04-01)
[2703] Lua Metatables - (2010-04-02)
[2710] __index and __newindex in Lua - metatable methods - (2010-04-05)
[3142] Private and Public - and things between - (2011-01-22)
[3396] Tables as Objects in Lua - a gentle introduction to data driven programming - (2011-08-17)
[3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
[3683] Weak references in Lua - what are they, and why use them? - (2012-04-04)
[3727] Using Lua tables as objects - (2012-05-11)
[3730] What is a metatable? How do I set one up? How do I use them? Lua - (2012-05-12)
[4117] Is Lua an Object Oriented language? - (2013-06-15)
[4248] Metatables, Metamethods, classes and objects in Lua - (2014-03-18)
[4273] Dot or Colon separator between table name and member in Lua - what is the difference? - (2014-05-06)
[4572] Tables with values and code in Lua - looks like an object? - (2015-11-05)
[4573] Classic style OO code - in Lua - (2015-11-05)
[4753] Lua, Tcl, Python, C and C++ courses - at our Melksham HQ or on your site - forward from July 2017 - (2017-07-02)
U105 - Lua - Tables and the table library. [1697] Sorting in lua - specifying your own sort routine - (2008-07-05)
[1742] Lua - Table elements v table as a whole - (2008-08-07)
[2346] The indexed and hashed parts of a Lua table - (2009-08-10)
[2499] ourdog is Greyhound, Staffie and Ginger Cake - (2009-11-09)
[2699] Lua tables - they are everything - (2010-03-30)
[3725] Lua Tables - (2012-05-10)
[4571] Lua - using modules to add your own utilities - (2015-11-04)
Some other Articles
How to stop forms on other sites submitting to your scriptsEvents in Melksham - read all about them, and tell us about yoursMelksham government and business organisationsFunctions are first class variables in Lua and PythonSpecial __ methods you can use in Lua metatablesWiltshire Business Support ServiceDeeper than Art - An exhibition of the tattoo Canvas - MelkshamBack in Cambridge to give a Lua courseChanges in Lua 5.2 - Garbage CollectionCan I cycle or ride my mobility scooter on the pavement?