一天三盒半 发表于 昨天 15:16

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

基础: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

页: [1]
查看完整版本: LUA进阶教程——元表(Metatable)与元方法