|
|
|
|
|
by sshumaker
5258 days ago
|
|
metatables don't involve dynamically mutating / self-modifying data structures. They're more equivalent to javascript's prototype, except slightly more general-purpose. You can easily use them to build an OO system, among other things. |
|
I should have been more specific when mentioning self-modifying data structures and Lua metatables in the same post.
Consider: it is possible for a table to be its own metatable, and for that table to contain (pointers to) some functions that govern storing data in the table. For the non-Lua reader, these tied-to-an-event-on-a-table functions are called table-access metamethods [0], and they allow for some dangerous shenanigans.
If these particular metamethods knew how to add to, rearrange, or delete from the set of callable functions already stored in the table, the subsequent layout and contents of the table could change in a non-deterministic way.
Something that looks like a simple assignment/update (__newindex/__index, insert/update, or your favorite pair of terms)
could trigger wholesale reorganization of the table, including deletion or addition of new metamethods.[0] "Programming in Lua 1ed (Chapter 13. Metatables and Metamethods, 13.4 – Table-Access Metamethods)" http://www.lua.org/pil/13.4.html
edit: incomplete example