LUA进阶教程——元表(Metatable)与元方法
基础:setmetatable /getmetatablelocal t = {}
local mt = {}
setmetatable(t, mt)
print(getmetatable(t) == mt) -- true常用元方法
(1)__index:访问不存在 key 时触发(OOP 核心)
local mt = {
__index = function(t, k)
print("访问不存在的 key:"..k)
return nil
end
}
local t = setmetatable({a=1}, mt)
print(t.a) -- 1
print(t.b) -- 访问不存在的 key:b → nil(2)__newindex:赋值不存在 key 时触发
local mt = {
__newindex = function(t, k, v)
print("赋值新 key:"..k.."="..tostring(v))
rawset(t, k, v) -- 真正写入
end
}
local t = setmetatable({}, mt)
t.x = 10 -- 赋值新 key:x=10(3)__add /__sub/__mul /__div:运算符重载
local vecMT = {
__add = function(v1, v2)
return {x=v1.x+v2.x, y=v1.y+v2.y}
end
}
local v1 = setmetatable({x=1,y=2}, vecMT)
local v2 = setmetatable({x=3,y=4}, vecMT)
local v3 = v1 + v2
print(v3.x, v3.y) -- 4 6
页:
[1]