Lua class 类的创建

5 篇文章 0 订阅

--普通类

function Class( super )

    local class = {}

    class.__index = class

    class.super = super

 

    if(super) then

      setmetatable(cls,{__index = cls.super})--设置元表

    end

 

    function  class:luaFunc(methodName,params )

        if self[methodName] ~= nil then

            self[methodName](self,params)

        end

 

    end

 

    function class.new(...)

        local instance = {}

       setmetatable(instance,{__index = cls})  --设置元表

 

        if cls.super then  --构造父类  父类也必须构造出新表

            cls.super = cls.super.new(...)

            setmetatable(cls,{__index = cls.super})

        end

        if instance.ctor then

            instance:ctor(...)

        end

        return instance

    end

 

    return class

end

--扩展类为支持多重继承

function CreateClass(...)

    local cls = {}

    local parents = {...}

 

    local function search(k, tables)

        for i, v in ipairs(tables) do

            if v[k] then

                return v[k]

            end

        end

        return nil

    end

 

    setmetatable(cls, {__index = function(t, k)

        return search(k, parents)

    end})

 

    function cls:luaFunc(methodName,params)

        if self[methodName] ~= nil then

            self[methodName](self,params)

        end

    end

 

    function  cls.new(...)

        local instance = {}

        setmetatable(instance,{__index = cls})

        if instance.ctor then

            instance.ctor(...)

        end

        return instance

    end

    return cls

end

--例如

--基类1

Entity = Class()

function  Entity:ctor(  )

end

function Entity:IsEntity(  )

    print("is entity")

end

基类2

Caster = Class()

function Caster:ctor(  )   

end

function Caster:IsCaster(  )

    print("is caster")

end

基类3

Target = Class()

function Target:ctor(  )

end

function Target:IsTarget(  )

    print("is target")

end

--子类

Creature = CreateClass(Entity,Caster,Target)

function Creature:Test()

    self:IsCaster()

    self:IsTarget()

    self:IsEntity()

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米神探

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值