Lua中的元表Metatable 2

2021-08-29 05:40:34 字數 1379 閱讀 3114

1、關係運算的metamethod:

2、庫定義的metamethod:

print函式 呼叫tostring來格式化輸出(預設以最簡輸出),當格式化乙個物件時,會檢查物件是否有乙個帶__tostring域的metatale。如果有則以物件作為引數,呼叫對應的函式完成格式化,返回tostring結果。

3、判定乙個表是否是空表,空表列印nil,非空表通過定義__tosring域的metable,來列印表的每個元素。

-------------**段-----------------

local tab = {}

tab.metatable = {}

function tab.new(tab)

local mytable = {}

for k, v in ipairs(tab) do

mytable[k] = v

endsetmetatable(mytable, tab.metatable)

return mytable

endfunction tab.printtab(tab)

local str = ""

end-- 判nil表

function tab.isniltable(tab)

if next(tab) == nil then

print("nil")

else

print(tab)

endend-- 測試

-- 設定print函式的tostring域

tab.metatable.__tostring = tab.printtab

local tab_test = tab.new({})

tab.isniltable(tab_test) -->nil

local tab_test = tab.new()

tab.isniltable(tab_test) -->

-------------**段-----------------

4、可以通過設定__metatable來限制外界更改metatable和getmetatable,用於保護metatable。

-------------**段-----------------

local tab = {}

tab.mymetatable = {}

setmetatable(tab, tab.mymetatable)

tab.mymetatable.__metatable = "not set metatable"

print(getmetatable(tab)) -->not set metatable

-------------**段-----------------

lua中的元表詳解

近日開始頻繁使用lua,發現身邊有很多同學對元表的理解不太正確,於是把這塊東西理了一下,分享出來 lua的表本質其實是個類似hashmap的東西,其元素是很多的key value對,如果嘗試訪問了乙個表中並不存在的元素時,就會觸發lua的一套查詢機制,也是憑藉這個機制來模擬了類似 繼承 的行為 舉例...

lua中的元表和元方法

元表概念 lua中,物件導向是用元表這種機制來實現的 元表 matatable lua在建立新的table時不會建立元表,比如以下 就可以演示 local t print getmetatable t nil設定元表和獲取元表 getmetatable和setmetatable 使用getmetat...

lua 元表中 newindex元方法

元方法 index 對乙個表a的元素id賦值,如果在表a中元素id不存在,不對id賦值 會呼叫元表中 如果元表存在 的 newindex表,如果表a中存在id這個元素,則對賦值,不呼叫元表中 newindex local newindextable local metablea local tabl...