关系类的元方法
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.__le = function(a,b) --<=
 for k in pairs(a) do --a是b的子集
 if not b[k] then return false end
 end
 return true
end

array.mt.__lt = function(a,b) --<
 return a<=b and not (b<=a)
end

array.mt.__eq = function(a,b) --==
 return a<=b and b<=a
end

a1 = array.new{"hello","world"}
a2 = array.new{"love","hello","tttt"}
a3 = array.new{"tttt","love","hello"}
print(a1 >= a2) --false
print(a2 <= a3) --true
print(a2 == a3) --true
print(a2 < a3) --false
print(a1 < a2) --false


关系类的元方法的两个操作元素table需要有一致的元表


首页 我的博客
粤ICP备17103704号