Lua類繼承的優雅實現方式

2021-07-15 00:23:00 字數 1421 閱讀 6047

網上有一些lua類繼承的示例,但是無法實現方法覆蓋,同時能呼叫已經被覆蓋的父類的方法。這兒是博主自己琢磨的一種方式,測試用可。

local _m = {}

function

_m:new

(name)

return

setmetatable(, )

endfunction

_m:show

() print(self.name .. ": show in parent:")

endfunction

_m:hello

(arg)

print(self.name .. ": hello in parent:" .. tostring(arg))

endreturn _m

local parent = require("parent")

local _m = {}

function

_m:new

() local obj = parent:new("the child")

local super_mt = getmetatable(obj)

-- 當方法在子類中查詢不到時,再去父類中去查詢。

setmetatable(_m, super_mt)

-- 這樣設定後,可以通過self.super.method(self, ...) 呼叫父類的已被覆蓋的方法。

obj.super = setmetatable({}, super_mt)

return

setmetatable(obj, )

end-- 覆蓋父類的方法。

function

_m:hello

() -- 只能使用這種方法呼叫基類的方法。

self.super.hello(self, "call from child")

print(tostring(self.name) .. ": hello in child")

endreturn _m

--

local

parent

=require("parent")

local child =

require("child")

local c = child:new()

-- 從parent繼承的show方法

c:show()

-- child自己的方法。

c:hello()

the child: show in parent:

the child: hello in parent:call from child

the child: hello in child

lua實現類的繼承

local class function class super local class type class type.ctor false class type.super super class type.new function local obj do 遞迴呼叫建構函式,實現構造基類的資料...

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中存在也會返...