码迷,mamicode.com
首页 > 其他好文 > 详细

第十三章 元表与元方法 Lua程序设计笔记

时间:2017-11-26 15:57:43      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:meta   --   nbsp   设置   fun   设计   set   类型   union   

--第十三章 元表与元方法
Lua中每个值都有一个表。table和userdata可以有各自独立的元表,其他类型的值共享一个元表。
Lua中只能设置table的元表。若要设置其他类型的值的元表,则必须通过C代码来完成。

--13.1算数类型的元方法

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


s1 = Set.new{10,20,30,50}
s2 = Set.new{30,1}

mt.__add = Set.union
mt.__mul = Set.intersection

s3 = s1 + s2
Set.print(s3)
Set.print((s1+s2)*s1)

除了__add、__mul外,还有__sub、__div等

 

(暂时记录到这里,先去学C++了)

第十三章 元表与元方法 Lua程序设计笔记

标签:meta   --   nbsp   设置   fun   设计   set   类型   union   

原文地址:http://www.cnblogs.com/leosirius/p/7898998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!