lua 使用setmetatable检查不存在的字段
和js一样,lua可以动态为对象添加字段,这在面向对象中是不可接受的理念
这里初始值,一定不能为nil
Person = {age = 0, name = ""} function Person:new(o) o = o or {} setmetatable(o, self) self.__index = function(table, key) if self[key] == nil then error("获取值时,不存在此字段: " .. key) else return self[key] end end self.__newindex = function(table, key, value) if self[key] == nil then error("设置值时,不存在此字段: " .. key) else if value == nil then error("''" .. key .. "' 值不允许设置为nil") end rawset(table, key, value) end end return o end local p1 = Person:new() p1.age = 1 -- 正确赋值 print(p1.age) -- 正确获取值 print(p1.age2) -- 错误获取值,不存在此对象,应报错 p1.age2 = 3 -- 错误设置值,不存在此对象,应报错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步