当前位置 : 主页 > 编程语言 > 其它开发 >

lua pbc bug,表中的对象修改后没有生效

来源:互联网 收集:自由互联 发布时间:2022-05-30
复盘报告:lua的pbc绑定,表中的对象修改后没有生效 问题 项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。 经过一番查询发现也有人

复盘报告:lua的pbc绑定,表中的对象修改后没有生效

问题

项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。

经过一番查询发现也有人遇到了这个问题:https://blog.codingnow.com/2012/04/pbc_improved.html

image-20220401154121284

和我们遇到的问题现象是一样的。

解决方案

经过代码尝试和网络搜索,找到了一个方向:https://github.com/cloudwu/pbc/pull/80

image-20220401154439422

尝试改方向,对decode后的表做深拷贝,发现正常了。

function clone(org)
    local function copy(org, res)
        for k, v in pairs(org) do
            if type(v) ~= "table" then
                res[k] = v
            else
                res[k] = {}
                copy(v, res[k])
            end
        end
    end

    local res = {}
    copy(org, res)
    return res
end

注意:深拷贝后,新表是普通的lua table和原来的pbc的有差异。

原因

2014年就发现了这个BUG,pbc作者表示考虑到性能问题不想改。

结论

lua看似简单,水也挺深的。

若数据量不大,使用json做数据绑定更合适。

pbc作者已经放弃维护这个项目了,可以考虑另一个https://github.com/starwing/lua-protobuf。

refer

https://blog.codingnow.com/2012/04/pbc_improved.html

https://github.com/cloudwu/pbc/pull/80

网友评论