Lua 模拟类的操作

来源:互联网 发布:mac word文件丢失 编辑:程序博客网 时间:2024/04/30 10:13

1.如果使用Lua编写面向对象的程序需要导入一个文件叫做extern.lua

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 setmetatable(new_table, getmetatable(object))    end    return _copy(object)end--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(...)            print("super type = "..superType)            print("classname is "..classname)            -- copy fields from class to native object            for k,v in pairs(cls) do                 print("k="..k)                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 clsendfunction 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 actionendfunction 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

2.创建一个类  testClass.lua

require "extern"Student=class("Student")function Student:ctor(...)self.sno  = nil   --学号self.name = nil   --姓名self.sex  = nil   --性别  endfunction Student:setSno(sno)if sno ~= nil then self.sno=sno  endendfunction Student:getSno()return self.sno endfunction Student:setName(name)if name ~= nil then    self.name=name  end end function Student:getName()return self.nameend function Student:setSex(sex)if sex ~= nil then    self.sex=sex endendfunction Student:getSex()return self.sex endfunction Student:print()print ("sno is :"..self:getSno().."\tsname is :"..self:getName().."\tsSex is:"..self:getSex())end

3 把类实例化对象 

require "testClass"student=Student.new()student:setSno("1")student:setName("Night");student:setSex("Male")student:print()


0 0
原创粉丝点击