---@des 数据深拷贝(递归)localfunction_copy(object, lookup_table)iftype(object)~="table"thenreturn object
elseif lookup_table[object]thenreturn lookup_table[object]endlocal new_table ={}
lookup_table[object]= new_table
for key, value inpairs(object)do
new_table[_copy(key, lookup_table)]=_copy(value, lookup_table)endreturnsetmetatable(new_table,getmetatable(object))endfunctionclone(object)local lookup_table ={}return_copy(object, lookup_table)end---@des 创建一个类并返回functionclass(classname, super)local superType =type(super)local cls
if superType ~="function"and superType ~="table"then
superType =nil
super =nilendif superType =="function"or(super and super.__ctype ==1)then-- inherited from native C++ Object
cls ={}if superType =="table"thenfor k, v inpairs(super)do
cls[k]= v
end
cls.__create = super.__create
cls.super = super
else
cls.__create = super
end
cls.ctor =function()end
cls.__cname = classname
cls.__ctype =1function cls.new(...)local instance = cls.__create(...)for k, v inpairs(cls)do
instance[k]= v
end
instance.class = cls
instance:ctor(...)return instance
endelse-- inherited from Lua Objectif super then
cls =clone(super)
cls.super = super
else
cls ={ ctor =function()end}end
cls.__cname = classname
cls.__ctype =2-- lua
cls.__index = cls
function cls.new(...)local instance =setmetatable({}, cls)
instance.class = cls
instance:ctor(...)return instance
endendreturn cls
end---@param A any class|object---@param B any class---@return boolean 判断A是否是B的实例或子类functionis_instance_of(A, B)ifnot A ornot B thenreturnfalseend
A = A.class or A
while A doif A == B thenreturntrueend
A = A.super
endreturnfalseend
```