local Point = {}
Point.__index = Point
function Point.new(x, y)
return setmetatable({x = x, y = y}, Point)
end
function Point.__lt(a, b)
return a.x < b.x and a.y < b.y
end
function Point.__le(a, b)
return a.x <= b.x and a.y <= b.y
end
local p1 = Point.new(1, 2)
local p2 = Point.new(2, 3)
-- No metamethod for >: Lua calls __lt(p2, p1)
local b1 = p1 > p2
-- b1 = false
local b2 = p1 < p2
-- b2 = true
-- >= calls __le with the operands swapped
local b3 = p1 >= p2
-- b3 = false
local b4 = p1 <= Point.new(1, 5)
-- b4 = true
print("b1 = " .. tostring(b1))
print("b2 = " .. tostring(b2))
print("b3 = " .. tostring(b3))
print("b4 = " .. tostring(b4))