Lua 元表

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


posted @ 2015-10-30 11:10  zyh_think  阅读(131)  评论(0编辑  收藏  举报