Luaでディープコピーをする

提供: MonoBook
移動: 案内検索

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に再帰を使わないディープコピーが落ちていた。