lua 只读表(嵌套只读表的实现的问题)

我想在lua 实现一个嵌套的只读表  

在5.3 之前我是修改lua 源码 增加__assign 的方法  赋值(t[k] ~= nil)的情况下触发  

这样就可以 使用一个 元表 实现嵌套 只读表. (这个方法是以前在公司看到的)


 

但是最近将 lua 更新到5.4 之后我尝试不用 增加__assign 实现嵌套只读表 发现原有的lua 无法实现嵌套只读表(主要是lua 源码改动比较大-增加__assign 的难度也变大了一点 我只是个菜鸟而已)

勉强实现(有一种思路 但是每次index 需要一个新的table)(代价太大没有必要)

(目前网上搜到的方法,也是嵌套是只读有缺陷的)

比如

local assert = assert

local setmetatable = setmetatable

local newindex = function(t,k,v)

    assert(false,"No write permission")

end

---设置一个只读表(嵌套只读表有缺陷)

---@param t  table @数据表

---@return table

local function localf(t)

    local mt = {

     __index = function(t,k)

        return t[k] 

     end,

     __newindex = newindex

    }

    setmetatable(t, mt) 

    return t

end

local a = localf{

    a = {

        aa = {}

    }

}

a.a.aa.lcs = 1

print(a.a.aa.lcs)


 

其实我不应该纠结这个问题,我认为只读表(在表达上面 表明只读的意思就行了,非要实现也没有太大意义)

你可能感兴趣的:(lua,lua)