function table.deepcopy(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 new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(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 new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end
function main()
--一个表类型的变量,这里模拟的是一个名为table的类,类中有四个属性
local Table =
{
array = {};
number= 0;
}
function table.deepcopy(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 new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
--重定义元素的索引
Table.__index=Table
--构造函数,new是自定义的名字
function Table.new(num, x,y)
local self ={} --初始化self
setmetatable(self,Table) --将self的元表设定为Class
self.number = num;
local tb = {x, y};
self.array = table.deepcopy(tb);
return self --返回自身
end
function Table:test()
print("num:" .. self.number.."x:" .. self.array[1] .. "y:" .. self.array[2])
end
--创建两个对象
local object1=Table.new(100, 10,2)
local object2=Table.new(200, 9,3)
--利用对象访问函数及属性
object1:test()
object2:test()
end
xpcall(main, __G__TRACKBACK__)