1. 元表 (Metatable)
元表是普通的 Lua 表,定义了原始值在某些特定操作下的行为。 我们称元表中的键为事件,称值为元方法。
设置 (SetMetatable)/获取 (GetMetatable) 元表:
设置元表的两种写法:
local mt = {}
setmetatable(t, mt)
setmetatable(t, {__add = function() end})
local mt = {}
local t = {}
print(getmetatable(t)) -- nil
setmetatable(t, mt) -- 设置表 t 的元表为 mt
print(mt)
print(getmetatable(t)) -- 获取元表地址,和上面打印的 mt 地址相同
输出结果:
nil table: 000001ECD17E3940 table: 000001ECD17E3940
2. 元方法
2.1 __add(对表进行'+'操作时触发)
local mt = {}
mt.__add = function(tab1, tab2)
local resTab = {}
local len = math.max(#tab1, #tab2)
if len == 0 then
return resTab
end
for i = 1, len, 1 do
(tab1[i]) == tab1[i] =
(tab2[i]) == tab2[i] =
resTab[i] = tab1[i] + tab2[i]
resTab
tab1 = {, , }
tab2 = {, , }
(tab1, mt)
(tab2, mt)
resTab = tab1 + tab2
index, value (resTab)
(value)

