Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
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
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)


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
4759 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, 96 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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
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: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb