gpt4 book ai didi

c++ - 脚本运行后引用 lua 表/对象

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:55 24 4
gpt4 key购买 nike

我正在用 Lua 设计一个 GUI 系统,绑定(bind)到 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 中,因此它尝试在 nil 上调用 setProperties 并崩溃。

我的问题是,如何确保在 handleOnClick 中仍然可以引用 objectTwo?我不想将它放在全局注册表或类似的地方,以避免污染命名空间。

我可以用闭包做些什么吗?

最佳答案

当构造objectOne时,local objectTwo变量还不在范围内,所以Lua假设从全局变量objectTwo读取,它从未被定义,所以在读取时返回 nil

至少将 local objectTwo 声明移到将引用它的代码之前。您不必在那里定义对象,可以稍后执行分配。但是变量声明必须在要访问它的代码之前。

还要注意数据/代码的所有权。您说您“将其转换为自定义 C++ 类”而没有额外的详细信息。您应该知道,您必须将回调函数的 Lua 值存储在某处。无论是注册表,还是某个类拥有的表,但仍存储在 Lua 可访问的某个地方,因此回调函数不会在稍后的某个时刻被垃圾回收。

关于c++ - 脚本运行后引用 lua 表/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58351884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com