--实现拷贝对象功能 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 new_table={} lookup_table[object]=new_table for key,value in pairs(object) do new_table[_copy(key)]=_copy(value) end return setmetable(new_table,getmetatable(object)) end return _copy(object) end --生成一个类 function class(classname, super) local superType = type(super) --type返回一个描述给定值的类型的字符串 local cls if superType ~= "function" and superType ~= "table" then superType = nil super = nil end if superType == "function" or (super and super.__ctype == 1) then -- inherited from native C++ Object cls = {} if superType == "table" then -- copy fields from super for k,v in pairs(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 = 1 function cls.new(...)--构造函数 local instance = cls.__create(...) -- copy fields from class to native object for k,v in pairs(cls) do instance[k] = v end instance.class = cls instance:ctor(...) cls_add_instance(classname,instance) return instance end else -- inherited from Lua Object if 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(...) cls_add_instance(classname,instance) return instance end end return cls end
时间: 2024-09-29 22:12:05