复盘报告:lua的pbc绑定,表中的对象修改后没有生效 问题 项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。 经过一番查询发现也有人
复盘报告:lua的pbc绑定,表中的对象修改后没有生效
问题项目中lua使用的pbc做数据绑定,遇到一个问题,发现修改表中的对象后,值没有生效,仍然为原值。
经过一番查询发现也有人遇到了这个问题:https://blog.codingnow.com/2012/04/pbc_improved.html
和我们遇到的问题现象是一样的。
解决方案经过代码尝试和网络搜索,找到了一个方向:https://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作者已经放弃维护这个项目了,可以考虑另一个https://github.com/starwing/lua-protobuf。
referhttps://blog.codingnow.com/2012/04/pbc_improved.html
https://github.com/cloudwu/pbc/pull/80