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