Luaでディープコピーをする
再帰を使ったディープコピー。
function deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
-- tableなら再帰でコピー
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
setmetatable(copy, deepcopy(getmetatable(orig)))
else
-- number, string, booleanなどはそのままコピー
copy = orig
end
return copy
end
つーか、githubに再帰を使わないディープコピーが落ちていた。