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...