修改后PBC Lua代码中的bug,为何对象变更未体现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计367个文字,预计阅读时间需要2分钟。
复盘:LUA的PBC绑定,对象修改后无生效+问题+项目中LUA使用PBC做数据绑定的,遇到一个难题,发现修改表中的对象后,值没有生效,仍为原值。经过一番查询,发现也有其他人遇到类似问题。
复盘报告:lua的pbc绑定,表中的对象修改后没有生效
问题项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。
经过一番查询发现也有人遇到了这个问题: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。
referblog.codingnow.com/2012/04/pbc_improved.html
github.com/cloudwu/pbc/pull/80
本文共计367个文字,预计阅读时间需要2分钟。
复盘:LUA的PBC绑定,对象修改后无生效+问题+项目中LUA使用PBC做数据绑定的,遇到一个难题,发现修改表中的对象后,值没有生效,仍为原值。经过一番查询,发现也有其他人遇到类似问题。
复盘报告:lua的pbc绑定,表中的对象修改后没有生效
问题项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。
经过一番查询发现也有人遇到了这个问题: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。
referblog.codingnow.com/2012/04/pbc_improved.html
github.com/cloudwu/pbc/pull/80

