readonlytb = function(tb, deep) if deep then for k, v inpairs(tb or {}) do iftype(v) == "table"then tb[k] = _readonlytb(v, deep) end end end local meta = { -- 当我们访问一个表不存在的域时, 解释器会去查找调用__index元方法 __index = tb, -- 当对table进行更新时, 对应的域不存在, 就会查找调用__newindex元方法 __newindex = function() assert(false, "table is readonly") end, -- 需要__pairs元方法, 方便用户遍历table, 否则只会遍历这个table自己的数据, 不会遍历继承到的数据 __pairs = function(...) returnpairs(tb) end } local t = {} setmetatable(t, meta) return t end