using "UnityEngine"
Set={}
local mt={}
function Set .new (l )--在Set 表中定义一个方法new
local set ={}
setmetatable(set ,mt)
for _,v in pairs(l) do
set [v]=true
end
end
function Det .union (a ,b )
local retSet = Set.new {}
for v in pairs(a ) do retSet[v]=true end
for v in pairs(b) do retSet[v]=true end
return retSet
end
function Set .intersection (a ,b )
local retSet = Set.new {}
for v in pairs(a ) do retSet[v]=b[v] end
return retSet
end
function Set .toString (set )
local tb = {}
for e in pairs(set ) do
tb[
end
return "{" ..table.concat(tb,"," ).."}"
end
function Set .print ( s )
print(Set.toString(s))
Debug.Log(Set.toString(s))
end
collectgarbage()
Set={}
local mt={}
function Set ,new ( l )
local set = {}
setmetatable(set ,mt)
for _,v in pairs(l) do set [v]=true end
return set
end
local set1 = Set.new ({10 ,20 ,30 })
local set2=Set.new ({1 ,2 })
print(getmetatable(set1))
print(getmetatable(set2))
assert(getmetatable(set1)==getmetatable(set2))
mt.__add = Set.union
local set1 = Set.new ({10 , 20 , 30 })
local set2 = Set.new ({1 , 2 })
local set3 = set1 + set2
Set.print(set3)
Windows = {}
Windows.default = {x = 0 , y = 0 , width = 100 , height = 100 , color = {r = 255 , g = 255 , b = 255 }}
Windows.mt = {}
function Windows .new (o )
setmetatable(o, Windows.mt)
return o
end
Windows.mt.__index = function (table , key )
return Windows.default[key]
end
local win = Windows.new ({x = 10 , y = 10 })
print(win.x)
print(win.width)
print(win.color.r)