查看: 2|回复: 0

LUA进阶教程——元表(Metatable)与元方法

[复制链接]

28

主题

68

回帖

1441

积分

金牌会员

积分
1441
QQ
发表于 昨天 15:16 | 显示全部楼层 |阅读模式
基础:setmetatable /getmetatable
local 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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表