lua pbc bug,表中的物件修改後沒有生效
阿新 • • 發佈:2022-04-02
覆盤報告: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。