Я проектирую систему с графическим интерфейсом на Lua, связанную с C ++. Я не буду вдаваться в ненужные подробности, но, по сути, скрипт lua, который создает форму, выглядит примерно так:
local objectTwo = Gui:newObject{
position = {10,10},
size = {100,100},
}
local objectOne = Gui:newObject{
position = {10,10},
size = {100,100},
handleOnClick = function(x, y, button)
objectTwo:setProperties{
hidden = false
}
end
}
По существу newObject передает таблицу в C ++, а handleOnClick превращается в пользовательский класс функций C ++. Когда по этому объекту щелкают, он вызывает этот класс функций и оценивается в Lua.
Однако objectTwo больше не существует в Lua, так как скрипт выполняется, поэтому он пытается вызвать setProperties для nil и вылетает.
Мой вопрос: как я могу гарантировать, что на objectTwo все еще можно ссылаться в handleOnClick? Я бы предпочел не помещать его в глобальный реестр или что-то подобное, чтобы не загрязнять пространство имен.
Могу ли я что-то сделать с закрытием?