码迷,mamicode.com
首页 > 其他好文 > 详细

lua学习:lua实现面向对象

时间:2018-08-23 02:02:09      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:面向对象   obj   article   col   tor   xxx   语法糖   color   return   

之前写过一篇关于lua实现面向对象的文章,借助元表和元方法实现,感觉也是有点乱。

我们可以参考cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现:

function class(classname, super)
    -- print(classname)
    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
            print ("superTyper is table");
            for k,v in pairs(super) do cls[k] = v end
            cls.__create = super.__create
            cls.super    = super
        else
            cls.__create = super
            cls.ctor = function() end
        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 = {}
            setmetatable(cls, {__index = 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 cls
end

 

创建对象时,可以通过className.new这种方式来创建,如

local MySpriteClass = class("MySpriteClass",cc.Sprite)

function MySpriteClass:ctor()

end

return MySpriteClass

 

mySpriteClass 实例创建

local mySprite = MySpriteClass.new(xxx.png)

 

 参考:

userdate和table类型的效率对比

class语法糖要注意了

cocos-lua学习笔记(五)cocos2d-Lua类的实现

lua学习:lua实现面向对象

标签:面向对象   obj   article   col   tor   xxx   语法糖   color   return   

原文地址:https://www.cnblogs.com/losophy/p/9521248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!