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)


 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值