您的位置:首页 > 编程语言 > Lua

Lua 元表

2015-10-30 11:10 281 查看

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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: