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需要有一致的元表