Таблицы Lua передаются по ссылке, поэтому они всегда являются «анонимными», а ссылки на них хранятся в переменной. Я бы просто положил все ваши "предметы" в таблицу
как это:
objects={}
function registerObject(obj)
objects[#objects+1]=obj
end
a={func=function(self) return(self.data) end, data='foo'}
b={func=function(self) return(self.data) end, data='bar'}
registerObject(a)
registerObject(b)
for k,v in pairs(objects) do
print("Object",k,"data:",v:func())
end
Следует помнить одну вещь: это запрещает сбор этих таблиц, поскольку в таблице объектов всегда есть ссылка на объекты, если вы явно не удалили ее. Это может или не может быть то, что вы хотите. Если вы не хотите, чтобы таблица объектов вмешивалась в сборку мусора, вы можете установить для ее записи __mode в метатаблице значение 'v' для слабых значений. Таким образом, ссылки на объект в таблице объектов не учитываются; если значение в таблице объектов является единственной оставшейся ссылкой на объект, объект будет собран (см. Программирование на Lua для получения дополнительной информации).