「Luaでディープコピーをする」の版間の差分
ナビゲーションに移動
検索に移動
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, | + | else |
+ | -- number, string, booleanなどはそのままコピー | ||
copy = orig | copy = orig | ||
end | end |
2018年1月30日 (火) 12:59時点における最新版
再帰を使ったディープコピー。
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に再帰を使わないディープコピーが落ちていた。