【Lua】自定义OOP类的声明和定义

来源:互联网 发布:php 一句话木马 菜刀 编辑:程序博客网 时间:2024/05/18 20:08

最近在cocos2d-x引擎附带的代码中发现了这样一段extern.lua

--Create an class.function class(classname, super)    local superType = type(super)    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(...)            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(...)            return instance        end    end     return clsend function schedule(node, callback, delay)    local delay = CCDelayTime:create(delay)    local callfunc = CCCallFunc:create(callback)    local sequence = CCSequence:createWithTwoActions(delay, callfunc)    local action = CCRepeatForever:create(sequence)    node:runAction(action)    return actionend function performWithDelay(node, callback, delay)    local delay = CCDelayTime:create(delay)    local callfunc = CCCallFunc:create(callback)    local sequence = CCSequence:createWithTwoActions(delay, callfunc)    node:runAction(sequence)    return sequenceend

发现它实际上就是在Lua中实现我们在C++, Java中常用的OOP Class特性


下面这篇Blog详细讲了它的使用方法:

http://www.swfdiy.com/?p=1663


已经解释的很好了,我就不再复述啦 :)



0 0
原创粉丝点击