算数运算的相关元方法
假设有一个用表来表示集合的模块。该模块还有一些用来计算集合并集和交集等的函数。
local set = {}
function Set.new (l)
local set = {}
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.interaction (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] = tostring(e)
end
return "{" .. table.concate(l, ", ") .. "}"
end
return 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
在此之后,所有有Se