【发布时间】:2020-02-09 14:36:56
【问题描述】:
我正在用 Lua 设计一个与 C++ 绑定的 GUI 系统。我不会在这里赘述不必要的细节,但本质上创建表单的 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 中对其进行评估。
然而,Lua 中不再存在 objectTwo,因为脚本已经运行,所以它尝试在 nil 上调用 setProperties 并崩溃。
我的问题是,如何确保在 handleOnClick 中仍然可以引用 objectTwo?我不想把它放在全局注册表或类似的地方,以避免污染命名空间。
我可以用闭包做些什么吗?
【问题讨论】:
标签: c++ user-interface lua scripting