In-out parameters

Classes / Methods

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)