網上有一些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中存在也會返...