Lua面向?qū)ο缶幊讨A(chǔ)結(jié)構(gòu)table簡(jiǎn)例
面向?qū)ο缶幊?/strong>
(Object Oriented Programming,OOP)是一種非常流行的計(jì)算機(jī)編程架構(gòu)。
Lua中最基本的結(jié)構(gòu)是table,所以需要用table來(lái)描述對(duì)象的屬性。
Lua中的function可以用來(lái)表示方法。那么Lua中的類可以通過(guò)table + function模擬出來(lái)。
簡(jiǎn)例:
-- Czhenya Lua 面向?qū)ο?-- 對(duì)于一個(gè)對(duì)象來(lái)說(shuō), 屬性 方法 --[[ 兩種定義函數(shù)的方式 person.eat = function() print(person.name.."在寫LUA") end function person.eat() print(person.name.."在寫LUA") end --]] --作為原型 Person = {name = 'Czhena',age = 22} function Person:eat() print(self.name.."的年齡是"..self.age) end function Person:new(o) -- 若o是空的則返回false local t = o or {} --[[ 和下面設(shè)置結(jié)果一樣,只是兩種不同的方式 setmetatable{t,self} self.__index=self --]] setmetatable(t,{__index = self}) --設(shè)置元表 --調(diào)用一個(gè)屬性的時(shí)候,如果t中不存在,就會(huì)在__index所指的table中查找 return t end -- 類似于通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象 person1 = Person:new({weight = 100}) person2 = Person:new() print(person1.name) print(person1.weight) print(person2.name) person1.name = "CZY" --不會(huì)改變?cè)恚砑拥絧erson.name person1:eat() person2:eat() --繼承 Student = Person:new() Student.grade = 1 stu1 = Student:new() stu1:eat() print(stu1.grade)
冒號(hào)和點(diǎn)定義函數(shù)的區(qū)別:
-- 使用冒號(hào)和點(diǎn)來(lái)的定義函數(shù),建議用什么定義函數(shù),用什么調(diào)用 person = {name="Czhenya",age=22} function person:eat() print(self.name.."的年齡是"..self.age) end person.eat(person) a = person --冒號(hào)調(diào)用self自動(dòng)賦值 a:eat() --通過(guò)點(diǎn)來(lái)調(diào)用的時(shí)候,self不會(huì)自動(dòng)賦值,必須通過(guò)參數(shù)傳遞 a.eat(a)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)本站的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。