local Swap = {}
Swap.__index = Swap
function Swap.new(v1, v2)
return setmetatable({v1 = v1, v2 = v2}, Swap)
end
-- Numbers are copied into the parameters
function Swap.numbers(v1, v2)
v1, v2 = v2, v1
end
-- A table is passed by reference: swap items
function Swap.strings(t1, t2)
t1[1], t2[1] = t2[1], t1[1]
end
-- self is a table too: fields change in place
function Swap:swap()
self.v1, self.v2 = self.v2, self.v1
end
local n1, n2 = 1, 2
Swap.numbers(n1, n2)
-- n1 = 1
-- n2 = 2
local s1, s2 = {"A"}, {"B"}
Swap.strings(s1, s2)
-- s1[1] = B
-- s2[1] = A
local pair = Swap.new("A", "B")
pair:swap()
-- pair.v1 = B
-- pair.v2 = A
print("n1 = " .. n1)
print("n2 = " .. n2)
print("s1[1] = " .. s1[1])
print("s2[1] = " .. s2[1])
print("pair.v1 = " .. pair.v1)
print("pair.v2 = " .. pair.v2)