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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM