--第十三章 元表与元方法
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++了)
时间: 2024-10-12 02:17:14