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)