Lua table deep clone and recursive merge
Lua
local function clone(v) -- acyclic tables
if type(v) ~= 'table' then return v end
local out = {}
for k, val in pairs(v) do out[clone(k)] = clone(val) end
return out
end
local function merge(base, override)
local out = clone(base)
for k, v in pairs(override) do
if type(v) == 'table' and type(out[k]) == 'table' then
out[k] = merge(out[k], v)
else
out[k] = clone(v)
end
end
return out
end
return { clone = clone, merge = merge }