In Lua, almost everything (!) is held as a table. You don't have lists, hashes, dicts, arrays, objects, namespaces - you have
tables. It helps consistency, in helps keep the language small - but at times it does mean you have to be a little bit more aware of how the features of tables can be combined to use the feature set in a chosen way.
Lets take tables as objects. Here's a suggestion:
- Definitions
* Put all your funtion(allity) into a table who's name is the class name
* first parameter of the object method functions to be the object/data table
* Have a function in there called "new" as your constructor
* Have a metatable which points to the class table for its methods
- creating objects
* Have your constructor create a local table of attributes
* Also have your constructor point to the metatable
* your constructor shoudl return the local table
- calling object methods
* defined as functions in the table for the class
* call them by "object.method(object, ...)" syntax
* or use the "object:method(...)" syntax, provided to make it easier
If you want to overload the operators for your table type (class) you can even to that in your metatable. The following are the methods you may define - in each case starting with __. And you may also provide a "tostring" method which controls how the table's to be printed out if you just say "print (mytable}":
function | when it's used |
add | + |
call | run as function |
concat | .. |
div | / |
eq | == |
index | catch all -> (direct back to self) |
le | <= |
len | # |
lt | < |
mod | % |
mul | * |
newindex | add element to table |
pow | ** |
sub | - |
unm | - (unary) |
There's an example of much of this in an example I wrote on the
Lua course earlier this week, teaching Lua in Glasgow. Very rarely do you use every feature in a short demonstration, so some of the timing above aren't illustrated. However, there are plenty of other examples in our
Towards OO in Lua resources. Full source of the example is
[here].
(written 2014-03-18, updated 2014-03-20)
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)
[3694] Special __ methods you can use in Lua metatables - (2012-04-12)
[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)
[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
Staveton Halt, former station between Trowbridge and MelkshamBroughton Gifford Halt, TransWilts Railway LineLacock Halt - former TransWilts StationAn evening in GlasgowMetatables, Metamethods, classes and objects in LuaYou wait a long time - then buses come in threes. It's timetabled that way!Python, PHP, Ruby, C, Lua, etc ... course prices held for the rest of 2014Disambiguation - PHP ListIt always happens to me when I'm in Borehamwood!Taking Greyhounds and Lurchers to London for the day