zoukankan      html  css  js  c++  java
  • lua类库 middleclass学习笔记

    middleclass使在lua中面象对象变的简单

    抄了一遍他的示例代码运行着试了试,基本懂了

    local class = require 'middleclass'
    
    --类的继承
    Person = class('Person')  --定义一个Person类
    function Person:initialize(name)  --构造函数
        self.name = name
    end
    
    function Person:speak() --方法
        print("Hi,i am " ..self.name .. ".")
    end
    
    AgedPerson = class('AgedPerson',Person) --子类
    AgedPerson.static.ADULT_AGE = 18  --类成员
    
    function AgedPerson:initialize(name,age)  --子类构造
        Person.initialize(self,name)
        self.age = age
    end
    
    function AgedPerson:speak()  --子类方法
        Person.speak(self)   --子类调用父类方法
        if(self.age < AgedPerson.ADULT_AGE) then
            print("i am underaged")
        else
            print("i am an adult")
        end
    end
    
    local p1 = AgedPerson:new('张东升',13) --定义一个子类对象
    local p2 = AgedPerson:new('无量',21)
    p1:speak()
    
    
    
    --Mixins 这种特性可以在不同的类之间共享一些函数,
    --可以是不同的基类
    HasWings =
    {
        fly = function(self)
            print('flap flap i am a ' .. self.class.name)
        end
    }
    
    Animal = class('Animal')  --动物类
    Insect = class('Insect',Animal)  --昆虫类
    Worm = class('Worm',Insect) --虫子
    Bee = class('Bee',Insect) --蜜蜂
    Bee:include(HasWings) --增加类成员
    Mammal = class('Mammal',Animal) --哺乳动物
    Fox = class('Fox',Mammal) --狐狸
    Bat = class('Bat',Mammal) --蝙蝠
    Bat:include(HasWings) --
    
    local bee = Bee()
    local bat = Bat()
    bee:fly()
    bat:fly()
    
    
    
    
    --下在这种方法
    DrinksCoffe = {}
    function DrinksCoffe:drink(drinkTime)
        if drinkTime ~= self.class.coffeeTime then
            print(self.name .. ": It is not the time to drink coffee")
        else
            print(self.name .. ": Mmm I love coffee ad drinkTime")
        end
    end
    
    function DrinksCoffe:include(klass)
        print(klass.name .. " drinks coffee at " .. klass.coffeeTime)
    end
    
    EnglishMan = class('EnglishMan')
    EnglishMan.static.coffeeTime = 5
    EnglishMan:include(DrinksCoffe)
    function EnglishMan:initialize(name) self.name = name end
    
    Spaniard = class('Spaniard')
    Spaniard.static.coffeeTime = 6
    Spaniard:include(DrinksCoffe)
    function Spaniard:initialize(name) self.name = name end
    
    tom = EnglishMan:new('tom')
    juan = Spaniard:new('juan')
    tom:drink(5)
    juan:drink(5)
    juan:drink(6)
    
    
    
    --为类增加元方法
    Point = class('Point')
    function Point:initialize(x,y)
        self.x = x
        self.y = y
    end
    
    function Point:__tostring()
        return 'Point:[' .. tostring(self.x) .. ',' .. tostring(self.y) .. ']'
    end
    p1 = Point(100,200)
    print(p1)
  • 相关阅读:
    vuejs 组件通讯
    导出pdf
    css 鼠标选中内容背景色
    console.log() 字体颜色
    使用cross-env解决跨平台设置NODE_ENV的问题
    Visual Studio动态生成版权信息(VS2015,VS2010,VS2008)
    程序员常用工具汇总
    存储过程分页
    oracle全表扫描
    CDM常用命令
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/3912600.html
Copyright © 2011-2022 走看看