加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在lua写一次表?

发布时间:2020-12-14 21:43:12 所属栏目:大数据 来源:网络整理
导读:我想在Lua中使用一次写入表(特别是LuaJIT 2.0.3),这样: local tbl = write_once_tbl()tbl["a"] = 'foo'tbl["b"] = 'bar'tbl["a"] = 'baz' -- asserts false 理想情况下,这将像常规表(pairs()和ipairs()工作)一样运行. __newindex基本上与我想要实现它的方法
我想在Lua中使用一次写入表(特别是LuaJIT 2.0.3),这样:

local tbl = write_once_tbl()
tbl["a"] = 'foo'
tbl["b"] = 'bar'
tbl["a"] = 'baz'  -- asserts false

理想情况下,这将像常规表(pairs()和ipairs()工作)一样运行.

__newindex基本上与我想要实现它的方法相反,我不知道任何使用pair()和ipairs()使代理表模式工作的技术.

解决方法

您需要使用代理表,即一个捕获对实际表的所有访问权限的空表:

function write_once_tbl()
    local T={}
    return setmetatable({},{
        __index=T,__newindex=
            function (t,k,v)
                if T[k]==nil then
                    T[k]=v
                else
                    error("table is write-once")
                end
            end,__pairs=  function (t) return  pairs(T) end,__ipairs= function (t) return ipairs(T) end,})
end

请注意,__ pairs和__ipairs仅适用于Lua 5.2及更高版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读