array = {}
array.mt = {}
function array.new(t)
local data = {}
for k,v in ipairs(t) do
data[v] = true
end
setmetatable(data,array.mt)
return data
end
array.mt.__add = function(a,b)
local data = array.new{}
for k in pairs(a) do data[k] = true end
for k in pairs(b) do data[k] = true end
return data
end
array.mt.__tostring = function(t)
local l = {}
for k in pairs(t) do
l[#l+1] = k
end
return table.concat(l,", ")
end
a = array.new{"one","three","love"}
b = array.new{"you","two","one"}
c = {"hello","world"}
print(a) --three,love,one
print(a+b) --two,one,love,three,you
print(a+c) --1,2,one,love,three
print(c+a) --1,2,three,love,one这些二元的操作符,会先从左操作数找table对应的元方法,如果找到就用它,如果没找到,就找右操作数table的元方法,找到了就用,如果都没有,那就报错了。