Я хочу построить простую иерархию наследования в Lua. У BaseClass
есть два атрибута: одно значение val
и таблица vals
. Если я создаю два объекта foo
и bar
из SubClass
и изменяю эти два атрибута, изменения val
работают, как и ожидалось, но для vals
кажется, что оба объекта совместно используют одну и ту же таблицу внутри.
BaseClass = {}
function BaseClass:new()
o = {}
setmetatable(o, self)
self.__index = self
o.val = 0
o.vals = {}
return o
end
SubClass = BaseClass:new()
function SubClass:new()
o = {}
setmetatable(o, self)
self.__index = self
return o
end
foo = SubClass:new()
bar = SubClass:new()
foo.val = 1
bar.val = 2
foo.vals[#foo.vals + 1] = 1
bar.vals[#bar.vals + 1] = 2
print(foo.val, bar.val)
print(#foo.vals, #bar.vals)
Код печатает
1 2
2 2
Как я могу решить это? Как создать две разные таблицы для foo
и bar
?