이것은 왜 내가 불가능했는지 항상 궁금해 한 질문입니다. 완벽한 복제 기능을 만들 수없는 이유는 무엇입니까? 루아 5.3에는 table.copy 함수가 포함되어 있지 않습니다 ... 모든 문제/케이스를 처리한다고 가정합니다.루아 : 완벽한 복제 기능, 왜 안 되니?
몇 가지 이유를 완벽하게 복제 또는 복사를 설명 할 수 https://gist.github.com/MihailJP/3931841 및 https://gist.github.com/tylerneylon/81333721109155b2d244 : 다양한 복제 기능으로
나는 ...이 (얕은 깊이, 재귀, 등)처럼
function deep (t) -- deep-copy a table
if type(t) ~= "table" then return t end
local meta = getmetatable(t)
local target = {}
for k, v in pairs(t) do
if type(v) == "table" then
target[k] = clone(v)
else
target[k] = v
end
end
setmetatable(target, meta)
return target
end
function shallow (t) -- shallow-copy a table
if type(t) ~= "table" then return t end
local meta = getmetatable(t)
local target = {}
for k, v in pairs(t) do target[k] = v end
setmetatable(target, meta)
return target
end
function copy1(obj)
if type(obj) ~= 'table' then return obj end
local res = {}
for k, v in pairs(obj) do res[copy1(k)] = copy1(v) end
return res
end
function copy2(obj)
if type(obj) ~= 'table' then return obj end
local res = setmetatable({}, getmetatable(obj))
for k, v in pairs(obj) do res[copy2(k)] = copy2(v) end
return res
end
function copy3(obj, seen)
if type(obj) ~= 'table' then return obj end
if seen and seen[obj] then return seen[obj] end
local s = seen or {}
local res = setmetatable({}, getmetatable(obj))
s[obj] = res
for k, v in pairs(obj) do res[copy3(k, s)] = copy3(v, s) end
return res
end
소스 것을 의미 기능을 만들 수 없습니까?
* 완벽한 *을 정의하십시오. – lhf
모든 상황, 사건 발생 등을 처리합니다. 즉 사용자가 복제 할 원하는 테이블을 입력하고 그것을 1 : 1로 복사합니다 (다른 이름 또는 다른 이름으로) – B1313
복제 : 'local t; t = {function() return t; 끝}' –