Скорее всего это происходит из-за того, что вся работа с таблицами происходит по ссылке. Поэтому, когда идет обращение к position (для любой таблицы с метатаблицей CObject) к нам в руки попадает ссылка на таблицу position которая была создана еще в таблице CObject.
Пока в качестве решения придумал следующее, таблицу в метатаблице объявить как nil и создать функцию которая будет переопределять position как таблицу и внесить туда все значения.
Если есть более адекватные решения пишите, буду рад. Ниже код файла Object.lua
local base = _G
module("Object")
local CObject = {
position = nil,
text = "Some text"
}
function CObject:init()
self.position = {}
self.position.x = 0
self.position.y = 0
end
function new()
local res = {}
base.setmetatable(res, { __index = CObject })
res:init()
return res
end