mherkender/lua.js

table.copy sample doesn't work

SiENcE opened this issue · 0 comments

This sample don't work, because of
local mt = getmetatable(t)
and
setmetatable(res,mt)
.

--recursive deep copy
function table.copy(t)
if type(t) ~= 'table' then return t end
local mt = getmetatable(t)
local res = {}
for k,v in pairs(t) do
if type(v) == 'table' then
v = table.copy(v)
end
res[k] = v
end
setmetatable(res,mt)
return res
end

Also this sample doesn't work.

function table.copy(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end
local new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end

Any hints?