在看lua仿單繼承

2022-03-15 03:28:07 字數 1465 閱讀 5021

--

lua仿單繼承

account =

--對於成員變數,第一此訪問要使用元表中的,在第一次也賦值到自己的域中了

--將不涉及到__index了

function

account:new(o)

o = o or

{} --

setmetatable看到後面,忘了這個啥意思了

--如a+b,當lua試圖對兩個表進行相加時,他會檢查兩個表是否有乙個表有metatable,

--如果知道檢查到元表有__add域,如果有直接呼叫__add方法

setmetatable(o, self)--

account表本身作為o的metatable,不設定元表,他到哪兒去查詢元方法呢

--當呼叫self沒有的成員時到self裡面查詢

self.__index = self--

自己作為自己的原型

return

oend

function

account:deposit(v)

self.balance = self.balance +v

endfunction

account:withdraw(v)

if v > self.balance then

print("

insufficient funds

") end

self.balance = self.balance -v

endspecialaccount = account:new()--

從account繼承所有操作

--重定義父類的withdraw函式因為他在本物件中就找到了此方法

function

specialaccount:withdraw(v)

if v - self.balance >= self:getlimit() then

print("

insufficient funds")

endself.balance = self.balance -v

endfunction

specialaccount:getlimit()

return self.limit or

0end

specialaccount = account:new()--

specialaccount此時將account設定成了元表,specialaccount有了account的所有的成員

--此時specialaccount的域limit的值已經是1000

s = specialaccount:new--

s繼承specialaccount有specialaccount所有的成員,specialaccount繼承account

s:withdraw(200.00

)s:deposit(

100.00)

嗎的真不好理解,太繞了

lua實現繼承

lua本身沒有像c 一樣的繼承功能 但是我們可以自己實現乙個類似c 的繼承功能 書本也有詳細介紹,不過讀起來確實費解,所以本人自己寫了乙個簡單的繼承,一目了然,用來學習很容易入手 完整 基類 people function people new o o o or setmetatable o,sel...

Lua 多重繼承

從 處開始function sertchfield parents k for i,v in pairs parents do local result v k 遍歷parents 裡的每個元素,查詢乙個鍵為k的成員 例如 fly onfoot 這裡找到了 fly onfoot 就返回 找不到 就 ...

lua中實現繼承

什麼是元表 元表像是乙個 操作指南 裡面包含了一系列操作的解決方案,例如 index方法就是定義了這個表在索引失敗的情況下該怎麼辦。index元方法 很多人對此都有誤解,這個誤解是 如果a的元表是b,那麼如果訪問了乙個a中不存在的成員,就會訪問查詢b中有沒有這個成員。而這個理解是完全錯誤的,實際上,...