set ={}set.mt = {}--
定義普通的表作為元表,為了避免命名汙染直接放在set內部
function
set.new(t)
local set ={}
setmetatable(set, set.mt)--
一組相關的表共享乙個metatable(通過這個可以描述他們共同的行為),乙個表也可以是自身的metatable(描述私有行為)
for _, l in
ipairs(t) do set[l] = true
endreturn
setend
function
set.union(a, b)
local res =set.new{}
for k in
pairs(a) do res[k] = true
endfor k in
pairs(b) do res[k] = true
endreturn
resend
function
set.intersection(a, b)
local res =set.new{}
for k in
pairs(a) do
res[k] =b[k]
endreturn
resend
function set.tostring
(set)
local s = "
"end
function set.print
(s)
print(set.tostring
(s))
end--
建立的表有相同的元表
s1 = set.new
s2 = set.new
print(getmetatable
(s1))
print(getmetatable
(s2))
set.mt.__add = set.union--
給元表設定__add函式
--當lua試圖對兩個表進行相加時,會檢查兩個表是否有乙個表有metatable,並且檢查metatable是否有__add域,如果有直接呼叫元方法計算
s3 = s1 +s2
set.
(s3)
set.mt.__mul =set.intersection
set.
print((s1 + s2)*s1)
Lua元表和元表方法
今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...
lua元表理解
2015 08 23 22 13 237人閱讀收藏 舉報 lua 在lua中任何變數都有乙個元表 我相信每個字串元表都是string相關,所以可以使用string length 元表中特殊的值有特殊的含義,比如 index,call,add等等。函式setmetatable a,meta 就是將me...
lua元表詳解
元表是用來定義對table或userdata操作方式的表 local t1 local t2 local t3 t1 t2 我們直接對兩個table執行 運算,會報錯 lua usercode file.lua 3 attempt to perform arithmetic on local t1 ...