通過lua的設定元表__index欄位,巧妙的運用在無法索引到物件的key時會呼叫__index的機制,實現了偽多型、繼承。
**如下:
inheritance = {}
_classtotaltable = {}
function
inheritance:class(father)
local classvo = {}
classvo.constructor = false
--建構函式
classvo.father = father --父類
classvo.new = function(...)
local obj = {}
setmetatable(obj,)
local
create
create = function(c,...)
if c.father then
create(c.father,...)
endif c.constructor then
c.constructor(obj,...)
endend
create(classvo,...)
return obj
endlocal virtualtable = {}
-- tip:當經過此繼承**return的物件增加成員變數時,放入虛表
_classtotaltable[classvo] = virtualtable
setmetatable(classvo,)
-- tip:索引不到對應key呼叫__index
-- 索引虛表,父類有此值,給予子類
if father then
setmetatable(virtualtable,)
endreturn classvo
end--使用事例
baseclass = inheritance:class()
function
baseclass:constructor()
print("base:constructor")
endfunction
baseclass:wowo()
print("base:wowo")
endsonclass = inheritance:class(baseclass)
function
sonclass:constructor()
print ("son:constructor")
endfunction
sonclass:wowo()
print("son:wowo")
endnewson = sonclass:new() --base:constructor --son:constructor
newson:wowo() --son:wowo
Lua 繼承與多型(例項)
交通工具類 vehicle 速度 通過里程數求時間 父類local vehicle 1.1父類構造function vehicle new speed local o o.speed speed or 0 setmetatable o,self self.index self return o en...
lua實現繼承
lua本身沒有像c 一樣的繼承功能 但是我們可以自己實現乙個類似c 的繼承功能 書本也有詳細介紹,不過讀起來確實費解,所以本人自己寫了乙個簡單的繼承,一目了然,用來學習很容易入手 完整 基類 people function people new o o o or setmetatable o,sel...
lua中實現繼承
什麼是元表 元表像是乙個 操作指南 裡面包含了一系列操作的解決方案,例如 index方法就是定義了這個表在索引失敗的情況下該怎麼辦。index元方法 很多人對此都有誤解,這個誤解是 如果a的元表是b,那麼如果訪問了乙個a中不存在的成員,就會訪問查詢b中有沒有這個成員。而這個理解是完全錯誤的,實際上,...