• 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)
  • 相关阅读:
    《不完美的她》开播,网友:周公子对「白帽子」有点误会吧?
    【Web安全】浅谈缓存XSS漏洞
    十分钟教你轻松掌握「移动PE导出表」,快来学习!
    干货分享丨表哥带你学习导入表及导入表注入
    「原创」萌新也能看懂的ThinkPHP3.2.3漏洞分析
    精选好文丨简析对称加密、非对称加密和混合加密
    工程师成长道路语录(转)
    在线画UML图的工具
    6种有效的开发模型(转)
    空降经理人的挑战 (原创)
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/3912600.html
Copyright © 2020-2023  润新知