在 Lua 中,`clone()` 函数用于创建一个给定对象的深拷贝副本。这意味着它会递归地复制对象的所有属性,包括嵌套的表,并返回一个完全独立的新对象,对新对象的修改不会影响原始对象。
函数定义示例如下:
```lua
function clone(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end
local newObject = {}
lookup_table[object] = newObject
for key, value in pairs(object) do
newObject[_copy(key)] = _copy(value)
end
return setmetatable(newObject, getmetatable(object))
end
return _copy(object)
end
```
该函数通过递归遍历输入对象(通常是表),并为每个遇到的表创建一个新的空表。它使用一个查找表(`lookup_table`)来处理循环引用,防止无限递归。最后,它会复制原对象的元表到新对象上。