The name says it all. I'm going into metatables, but at the moment, I see no use for it.
Quick review: A metatable can be applied to tables to give them more functionality. Special keys called metamethods are added to the metatable to monitor, say, when you're trying to access something that doesn't exist in the table, or assigning new keys to the table. The most commonly used metamethods are:
__index
: Controls what happens if you try to access something that's not in the table. This could be either a function or a table. Examples:
--Boring example 1 t = { a = 1, b = 2, c = 3 } mt = { __index = function(self, key) --Where "self" is the table, and the key isn't actually in that table. print(key.." isn't in the table!") end } setmetatable(t, mt) a = t.a b = t.b c = t.c d = t.d --Try to access "d", which isn't in the table
--Boring example 2 t = setmetatable({a = 1, b = 2, c = 3}, { __index = {d = 4} }) print(t.d) --"d" is not in the table, but it's in the metatable's __index, so this works.
--Fun example: Adding properties to parts?? template = Instance.new("Part") --For getting the part's properties properties = {hacker = "funyun", secretmessage = "hacked lol"} --New properties for the part part = setmetatable(properties, {__index = template}) --If it's not in the new properties, it's in the template part.Parent = workspace part.BrickColor = BrickColor.Red() print(part.hacker) print(part.secretmessage)
There's also __newindex
for monitoring when a new thing is added to the table. Examples on that:
--Boring example 1 t = {a = 1, b = 2, c = 3} mt = { __newindex = function(self, key, value) --Self = t, key = what you're putting in the table, value = what you set it to print("I can't let you do that.") end } setmetatable(t, mt) t.d = 4 print(t.d)
--Boring example 2 t = {a = 1, b = 2, c = 3} mt = { __newindex = function(self, key, value) rawset(self, key, value * 10) --Since doing "self.key = value * 10" would trigger __newindex again, I used rawset. end } setmetatable(t, mt) t.d = 4 print(t.d)
Note how often you use tables in Roblox Lua. We use them for all kinds of stuff. Therefore, it's good to know about these metatables and their metamethods.
Answer
I never use metatables but what they do is that it's basically a function attached to a array/table that fires if you call the certain parameter/listener for the table.
http://wiki.roblox.com/index.php?title=Metatable