lua實現類的繼承

2021-07-03 21:29:28 字數 1495 閱讀 9510

local _class={}

function class(super)

local class_type={}

class_type.ctor=false

class_type.super=super

class_type.new=function(...)

local obj={}

do-- 遞迴呼叫建構函式,實現構造基類的資料

local create

create = function(c,...)

if c.super then

create(c.super,...)

endif c.ctor then

c.ctor(obj,...)

endend

create(class_type,...)

end-- 指定虛函式表

setmetatable(obj,)

return obj

endlocal vtbl={}

_class[class_type]=vtbl

-- 將類的函式,存入虛函式表

setmetatable(class_type,)

-- 如果有基類,在自己的虛函式表中查不到時,查詢基類的虛函式表

if super then

setmetatable(vtbl,)

endreturn class_type

endbase_type=class() -- 定義乙個基類 base_type

function base_type:ctor(x) -- 定義 base_type 的建構函式

print("base_type ctor")

self.x=x

end

function base_type:print_x() -- 定義乙個成員函式 base_type:print_x

print(self.x)

end

function base_type:hello() -- 定義另乙個成員函式 base_type:hello

print("hello base_type")

endtest=class(base_type) -- 定義乙個類 test 繼承於 base_type

function test:ctor() -- 定義 test 的建構函式

print("test ctor")

end

function test:hello() -- 過載 base_type:hello 為 test:hello

print("hello test")

enda=test.new(1) -- 輸出兩行,base_type ctor 和 test ctor 。這個物件被正確的構造了。

a:print_x() -- 輸出 1 ,這個是基類 base_type 中的成員函式。

a:hello() -- 輸出 hello test ,這個函式被過載了

lua 類的繼承實現

1.lua 類中其實沒有類的概念,乙個類只是用乙個表 table 來管理的,如果想要實現子類繼承父類,簡單來說就是把兩個表組到一起。2.lua中提供了原表 metatable 可以通過原表來改變原來lua類的一些行為,比如把兩個表相加 a b father classfather.index cla...

lua 實現類 和 繼承

lua 實現類 繼承 需要以 table 表 的形式實現 table lua的資料結構之一 setmetatable a,b 設定a的元表為b 設定完元表之後 還要將 b的 index 指向自身 這樣的話 在a中查詢元素找不到的話,就會去b中查詢 如果b的 index沒有賦值,那麼及時b中存在也會返...

Lua類繼承的優雅實現方式

網上有一些lua類繼承的示例,但是無法實現方法覆蓋,同時能呼叫已經被覆蓋的父類的方法。這兒是博主自己琢磨的一種方式,測試用可。local m function m new name return setmetatable endfunction m show print self.name show...