修改后PBC Lua代码中的bug,为何对象变更未体现?

2026-05-17 04:031阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计367个文字,预计阅读时间需要2分钟。

修改后PBC Lua代码中的bug,为何对象变更未体现?

复盘:LUA的PBC绑定,对象修改后无生效+问题+项目中LUA使用PBC做数据绑定的,遇到一个难题,发现修改表中的对象后,值没有生效,仍为原值。经过一番查询,发现也有其他人遇到类似问题。

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

问题

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

修改后PBC Lua代码中的bug,为何对象变更未体现?

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

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

解决方案

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

尝试改方向,对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作者已经放弃维护这个项目了,可以考虑另一个github.com/starwing/lua-protobuf。

refer

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

github.com/cloudwu/pbc/pull/80

本文共计367个文字,预计阅读时间需要2分钟。

修改后PBC Lua代码中的bug,为何对象变更未体现?

复盘:LUA的PBC绑定,对象修改后无生效+问题+项目中LUA使用PBC做数据绑定的,遇到一个难题,发现修改表中的对象后,值没有生效,仍为原值。经过一番查询,发现也有其他人遇到类似问题。

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

问题

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

修改后PBC Lua代码中的bug,为何对象变更未体现?

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

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

解决方案

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

尝试改方向,对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作者已经放弃维护这个项目了,可以考虑另一个github.com/starwing/lua-protobuf。

refer

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

github.com/cloudwu/pbc/pull/80