local Point = {}
Point.__index = Point
function Point.new(x, y)
return setmetatable({x = x, y = y}, Point)
end
-- Bitwise not: ~p
function Point.__bnot(p)
return Point.new(p.y, p.x)
end
-- Unary minus: -p
function Point.__unm(p)
return Point.new(-p.x, -p.y)
end
local p = Point.new(1, 3)
-- An operator is an expression:
-- its result has to be used
local swapped = ~p
-- swapped = 3, 1
local negative = -p
-- negative = -1, -3
print("swapped = " .. swapped.x
.. ", " .. swapped.y)
print("negative = " .. negative.x
.. ", " .. negative.y)