antirez / antirez/lua-cmsgpack

cmsgpack.pack(t) got empty

オープン
#67 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
C
スター
383
フォーク
122
PR マージ指標
30日以内にマージされた PR はありません

説明

```
local cmsgpack = require("cmsgpack")

local function to_readonly_table(input_table)
if input_table == nil then
return nil
end
assert(type(input_table) == 'table')
local travelled_tables = {}
local function __read_only(tbl)
if not travelled_tables[tbl] then
local tbl_mt = getmetatable(tbl)
if not tbl_mt then
tbl_mt = {}
setmetatable(tbl, tbl_mt)
end

local proxy = tbl_mt.__read_only_proxy
if not proxy then
proxy = {}
tbl_mt.__read_only_proxy = proxy
local proxy_mt = {
__index = tbl,
__newindex = function(t, k, v)
error("error write to a read-only table with key = " .. tostring(k))
end,
__pairs = function(t)
return pairs(tbl)
end,
__len = function(t)
return #tbl
end,
__read_only_proxy = proxy
}
setmetatable(proxy, proxy_mt)
end
travelled_tables[tbl] = proxy
for k, v in pairs(tbl) do
if type(v) == "table" then
tbl[k] = __read_only(v)
end
end
end
return travelled_tables[tbl]
end
return __read_only(input_table)
end

local t = to_readonly_table({
a = 1,
b = 2
})
local tmp = cmsgpack.pack(t)
local origin = cmsgpack.unpack(tmp) -- this one become empty
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。