1. 程式人生 > 其它 >lua pbc bug,表中的物件修改後沒有生效

lua pbc bug,表中的物件修改後沒有生效

覆盤報告: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。

refer

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

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