lua實現偽多型繼承

2021-07-15 08:43:46 字數 1456 閱讀 4125

通過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中有沒有這個成員。而這個理解是完全錯誤的,實際上,...