「Luaでディープコピーをする」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「Luaディープコピーがしたい。 再帰を使ったディープコピー。 <source lang="lua"> function deepcopy(orig) local orig_type = type(...」)
 
imported>Administrator
 
7行目: 7行目:
 
     local copy
 
     local copy
 
     if orig_type == 'table' then
 
     if orig_type == 'table' then
 +
        -- tableなら再帰でコピー
 
         copy = {}
 
         copy = {}
 
         for orig_key, orig_value in next, orig, nil do
 
         for orig_key, orig_value in next, orig, nil do
12行目: 13行目:
 
         end
 
         end
 
         setmetatable(copy, deepcopy(getmetatable(orig)))
 
         setmetatable(copy, deepcopy(getmetatable(orig)))
     else -- number, string, boolean, etc
+
     else
 +
        -- number, string, booleanなどはそのままコピー
 
         copy = orig
 
         copy = orig
 
     end
 
     end

2018年1月30日 (火) 12:59時点における最新版

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