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