antirez / antirez/lua-cmsgpack

cmsgpack.pack(t) got empty

Đang mở
#67 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
C
Star
383
Fork
122
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

```
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
```

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.