lua 複製物件

Posted on Thu 06 October 2016 in note

之前踩到一個坑,因為沒注意到指定 array table 中的物件時是 reference 到原有物件,所以整個 table 中的東西都長得一樣,而且還牽一髮動全身。解決方式就是複製生出新的物件。

:::lua
function deepcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        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, etc
        copy = orig
    end
    return copy
end

lua