vector = {mt = {}} function vector.new (x, y) local new = {x = x or 0, y = y or 0} setmetatable(new, vector.mt) return new end function vector.mt.__add (v1, v2) return vector.new(v1.x + v2.x, v1.y + v2.y) end function vector.mt.__sub (v1, v2) return vector.new(v1.x - v2.x, v1.y - v2.y) end function vector.mt.__mul (v, s) return vector.new(v.x * s, v.y * s) end function vector.mt.__div (v, s) return vector.new(v.x / s, v.y / s) end function vector.print (vec) print("(" .. vec.x .. ", " .. vec.y .. ")") end local a, b = vector.new(5, 7), vector.new(2, 3) vector.print(a + b) vector.print(a - b) vector.print(a * 11) vector.print(a / 2)