Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Metatables, Metamethods, classes and objects in Lua

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}":

functionwhen it's used
add+
callrun as function
concat..
div/
eq==
indexcatch all -> (direct back to self)
le<=
len#
lt<
mod%
mul*
newindexadd 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
U105 - Lua - Tables and the table library.
  [4571] Lua - using modules to add your own utilities - (2015-11-04)
  [4273] Dot or Colon separator between table name and member in Lua - what is the difference? - (2014-05-06)
  [3725] Lua Tables - (2012-05-10)
  [3694] Special __ methods you can use in Lua metatables - (2012-04-12)
  [2703] Lua Metatables - (2010-04-02)
  [2699] Lua tables - they are everything - (2010-03-30)
  [2499] ourdog is Greyhound, Staffie and Ginger Cake - (2009-11-09)
  [2346] The indexed and hashed parts of a Lua table - (2009-08-10)
  [1742] Lua - Table elements v table as a whole - (2008-08-07)
  [1697] Sorting in lua - specifying your own sort routine - (2008-07-05)

U107 - Object Orientation - the Lua way
  [4753] Lua, Tcl, Python, C and C++ courses - at our Melksham HQ or on your site - forward from July 2017 - (2017-07-02)
  [4573] Classic style OO code - in Lua - (2015-11-05)
  [4572] Tables with values and code in Lua - looks like an object? - (2015-11-05)
  [4117] Is Lua an Object Oriented language? - (2013-06-15)
  [3730] What is a metatable? How do I set one up? How do I use them? Lua - (2012-05-12)
  [3727] Using Lua tables as objects - (2012-05-11)
  [3683] Weak references in Lua - what are they, and why use them? - (2012-04-04)
  [3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
  [3396] Tables as Objects in Lua - a gentle introduction to data driven programming - (2011-08-17)
  [3142] Private and Public - and things between - (2011-01-22)
  [2710] __index and __newindex in Lua - metatable methods - (2010-04-05)
  [2701] Is Lua an Object Oriented language? - (2010-04-01)
  [2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
  [2359] A fresh example - objects the Lua way - (2009-08-13)
  [2318] For Lua Programmers AND for Town Planners - (2009-08-02)
  [1819] Calling base class constructors - (2008-10-03)
  [1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
  [1699] If you are learning Lua, here are some more examples - (2008-07-06)
  [1692] Towards Object Oriented Programming in Lua - (2008-06-30)


Back to
You wait a long time - then buses come in threes. It's timetabled that way!
Previous and next
or
Horse's mouth home
Forward to
An evening in Glasgow
Some other Articles
Staveton Halt, former station between Trowbridge and Melksham
Broughton Gifford Halt, TransWilts Railway Line
Lacock Halt - former TransWilts Station
An evening in Glasgow
Metatables, Metamethods, classes and objects in Lua
You 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 2014
Disambiguation - PHP List
It always happens to me when I'm in Borehamwood!
Taking Greyhounds and Lurchers to London for the day
4750 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4248_Met ... n-Lua.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat