1. lua元表
元表概念:
- 引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。
- 访问机制:例如两个table相加:
1.先检查两者之一是否有元表
2.检查是否有一个叫__add的字段,
3.若找到,则调用对应的元方法。
__add
等即时字段,其对应的值(往往是一个函数或是table)就是“元方法”。
2. lua实例
local Set = {}
local mt = {}
function Set.new( l )
local set = {}
setmetatable(set, mt)
for _, v in ipairs( l ) do
set[v] = true
end
return set
end
function Set.union( a, b )
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
function Set.intersection( a, b )
local res = Set.new{}
for k in pairs(a) do
res[k] = b[k]
end
return res
end
function Set.tostring( set )
local l = {}
for e in pairs(set) do
l[#l + 1] = e
end
return "{" .. table.concat( l, ", ") .. "}"
end
function Set.print(s)
print(Set.tostring(s))
end
mt.__add = Set.union
s1 = Set.new{10, 20, 30, 50}
s2 = Set.new{30, 1}
s3 = s1 + s2
Set.print(s3)
print(#s3)
print(getmetatable(s1))
print(getmetatable(s2))