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