Lua中每個值都可具有元表。 元表是普通的Lua表,定義了原始值在某些特定操作下的行爲。你可通過在值的原表中設置特定的字段來改變作用於該值的操作的某些行爲特徵。例如,當數字值作爲加法的操作數時,Lua檢查其元表中的"__add"字段是否有個函數。如果元表重載了該元方法,Lua則調用該加法。
setmetatable(只能用於table)和getmetatable(用於任何對象)
語法:setmetatable (table, metatable),對指定table設置元表metatable 【如果元表(metatable)中存在__metatable鍵值,setmetatable會失敗】
語法:tmeta = getmetatable (tab),返回對象的元表(metatable) 【如果元表(metatable)中存在__metatable鍵值,當返回__metatable的值】
我們稱元表中的鍵爲事件(event),稱值爲元方法(metamethod)。前述例子中的事件是"add",元方法是執行加法的函數。
可通過函數getmetatable查詢任何值的元表。
可通過函數setmetatable替換表的元表。不能從Lua中改變其他類型的元表(除了使用調試庫);必須使用C API才能做到。
lua查找表元素過程:http://blog.csdn.net/xocoder/article/details/9028347