如何通过值复制Lua表?
发布时间:2020-12-15 00:06:32 所属栏目:大数据 来源:网络整理
导读:最近我写了一些Lua代码: local a = {}for i = 1,n do local copy = a -- alter the values in the copyend 显然,这不是我想做的,因为变量持有一个匿名表的引用,而不是Lua中的表本身的值。这显然是在Programming in Lua年,但我忘了它。 所以问题是我应该
最近我写了一些Lua代码:
local a = {} for i = 1,n do local copy = a -- alter the values in the copy end 显然,这不是我想做的,因为变量持有一个匿名表的引用,而不是Lua中的表本身的值。这显然是在Programming in Lua年,但我忘了它。 所以问题是我应该写什么,而不是copy = a得到一个值的副本? 解决方法
要打一点可读的代码高尔夫,这里是一个简单的版本,处理标准的棘手案件:
>表作为键, 我们可以在7行: function copy(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[copy(k,s)] = copy(v,s) end return res end 在this gist年有一个简短的Lua深度复制操作。 另一个有用的参考是this Lua-users wiki page,其中包括一个如何避免__pairs元方法的示例。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |