Lua 的元表(metatable)机制可以用来实现类似"继承"的效果。下面这段示例展示了如何把一张表作为另一张表的元表,并借助 __index 字段让子表在查找不到字段时自动回落到父表。
示例代码
local a={x=5}
function a:func()
print("func")
end
a.__index=a--
local b={t=6}
--[[
function b:func()
print("func111")
end
--]]
setmetatable(b,a)-- 吧a设置为b的元表,b中未查找到 就到a中查找
--b相当于继承了a
print(b.x)
b.func()--如果b中没有func 那么调用a中的func
关键点解读
a.__index=a让表a自己充当__index元方法的查找源,这样当子表找不到字段时,Lua 会转而去a中查找。setmetatable(b,a)把a设置为b的元表,于是b就"继承"了a中定义的字段和方法。print(b.x)会输出5,因为b本身没有x,Lua 顺着元表链找到a.x。b.func()同理:b没有定义func,最终调用的是a中的func。