類
在很多面向?qū)ο蟮恼Z言中有類(class)的概念,對象是類的實例。Lua 中不存在類的概念。Lua 就像 JavaScript 一樣是面向原型的語言(http://en.wikipedia.org/wiki/Prototype-based_programming),這類語言使用一個對象表示一個“類”,其他對象(此類的實例)使用此對象作為原型。我們有兩個 table p 和 obj,將 p 設(shè)置為 obj 的原型(回顧:https://www.jb51.net/article/56690.htm):
obj 中不存在的操作會在 p 中查找。
看一個詳細的例子:
在方法定義時使用冒號能夠添加一個隱藏的參數(shù) self 給方法,在方法調(diào)用時使用冒號能夠?qū)⒄{(diào)用者作為一個額外的參數(shù)傳遞給此方法,例如:
self 為方法的調(diào)用者。
在 Account 這個例子中,一個小優(yōu)化是,我們沒有必要創(chuàng)建一個額外的 metatable,而直接使用 Account 作為 metatable。
繼承
我們通過一個例子來解釋 Lua 如何實現(xiàn)繼承。假定我們需要子類 SpecialAccount 繼承于 Account,SpecialAccount 是可以透支的。
首先構(gòu)造一個子類:
這里通過 SpecialAccount:new 構(gòu)造了對象 sa,并且 sa 的 metatable 為 SpecialAccount。執(zhí)行 sa:withdraw(100),Lua 在 sa 中找不到 withdraw,就會在 SpecialAccount 中找,在 SpecialAccount 中也找不到 withdraw,然后在 Account 中找到 withdraw 并調(diào)用它。Account 中的 withdraw 顯然不是我們想要的,我們在 SpecialAccount 中重新定義它:
我們再調(diào)用 sa:withdraw(100),Lua 先在 SpecialAccount 中找到 withdraw 并調(diào)用它。
標(biāo)簽:德宏 金昌 天門 儋州 天門 濰坊 臺灣 宣城
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua 極簡入門指南(七):面向?qū)ο缶幊獭?,本文關(guān)鍵詞 Lua,極簡,入門,指南,七,面向,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。