Lua 元表实战:只读表、默认值与运算符重载
Lua 的表默认只有一种行为:读不存在的键返回 nil,写键直接生效,两个表不能相加。元表(metatable)是 Lua 留下的扩展点,它允许我们挂上一组元方法,改变表在索引、赋值、比较、运算、调用和打印时的表现。很多人把元表当成“高级语法”,其实它更像一张钩子表:只有当默认操作需要额外信息时,Lua 才会去元表里找对应的钩子。
本文示例基于 Lua 5.4,可直接保存为 .lua 文件后用 lua 文件名.lua 运行。
元表基础
每个表最多关联一个元表,元表本身也是表。setmetatable(t, mt) 会返回 t,因此可以嵌套调用;getmetatable(t) 用来取回元表。