lua oop オブジェクト指向 setmetatable

Point = {}
Point_mt = { __index=Point }
function Point.new(x, y)
    tmp = {}
    tmp.x = x
    tmp.y = y
    return setmetatable (tmp, Point_mt)
end

function Point:set(x, y)
    self.x = x
    self.y = y
end

function Point:get()
    return self.x, self.y
end

function test()
    o = Point.new(0, 0)
    a = Point.new(10, 10)    --いくつも作れる

    o:set(-10, -10)    --oからもPointの関数setが呼び出せる。
    --この場合変更されるのはo.xとo.y
end

引用元