
function class(classname,...) local cls = {__cname = classname} -- 设置类的名字 local supers = {...} for _,super in ipairs(supers) do -- 遍历第二个参数 local superType = type(super) if superType == "function" then -- 如果参数是一个函数 则将这个函数设置为类的__create函数 assert(cls.__create == nil) cls.__create = super elseif superType == "table" then if super[".isclass"] then -- 如果是一个c++的对象 assert(cls.__create == nil) cls.__create = function() return super:create() end __create函数就等于调用c++类的create函数 else cls.__supers = cls.__supers or {} cls.__supers[#cls.__supers + 1] = super if not cls.super then -- set first super pure lua class as class.super cls.super = super end end else error(string.format("create class \"%s\" with invalID super type",classname),0) end end cls.__index = cls if not cls.__supers or #cls.__supers == 1 then -- 如果只有一个父类 则设置Metatable为一个表 setMetatable(cls,{__index = cls.super}) else setMetatable(cls,{__index = function(_,key) -- 如果有多个父类,则设置Metatable为一个函数,通过函数查找对应的函数 local supers = cls.__supers for i = 1,#supers do local super = supers[i] if super[key] then return super[key] end end end}) end if not cls.ctor then cls.ctor = function() end end cls.new = function(...) local instance if cls.__create then instance = cls.__create(...) else instance = {} end setMetatableindex(instance,cls) instance.class = cls instance:ctor(...) return instance end cls.create = function(_,...) return cls.new(...) end return clsend总结
以上是内存溢出为你收集整理的cocos2dx-lua里面class的实现全部内容,希望文章能够帮你解决cocos2dx-lua里面class的实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)