在脚本运行后引用 lua 表/对象
Referencing lua table/object after script has been run
我正在Lua中设计一个GUI系统,绑定到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中引用?我宁愿不将其放在全局注册表或类似注册表中,以避免污染命名空间。
我可以用关闭做些什么吗?
构造objectOne
时,local objectTwo
变量尚未在作用域中,因此Lua假定从全局变量objectTwo
读取,该变量从未定义过,因此在读取时返回nil
。
至少将local objectTwo
声明移到将引用它的代码之前。您不必在那里定义对象,稍后可以执行分配。但是变量声明必须在想要访问它的代码之前。
还要注意数据/代码的所有权。您说您"将其转换为自定义C++类",但没有额外的细节。您应该知道,您必须将回调函数的 Lua 值存储在某处。无论是注册表,还是一些类拥有的表,但仍然存储在Lua可以访问的地方,因此回调函数不会在以后的某个时刻被垃圾回收。
相关文章:
- 使用 LuaBridge 或 Lua 将对象传递给 Lua 函数C++
- 使用 Lua 中的C++库对象
- Lua C API - 从C++分配和使用类的对象成员
- 在脚本运行后引用 lua 表/对象
- 如何通过LightUserData对象将表参数从LUA传递到C
- 使用Lua定义C++游戏中对象的变量
- 如何在LUA中创建一个C++兼容的函数对象
- 如何推动在LUA脚本上使用的现有/创建/实例化类对象
- 而不是在 lua 中创建一个对象,如何让 lua 直接高C++对象来启动方法?
- 我应该如何编写用C++代码编写的Lua API/对象模型的文档
- 无法将Boost.Any对象传递到C++Lua绑定
- 对象与静态成员的lua/C++绑定
- luabind获取c++对象的类元表,将obj作为参数推送到lua函数
- 将Lua类对象存储到C指针,并将其推送回Lua Stack
- 在 Lua 5.2 中返回 C++ 对象的实例
- 在 c++ 中使用 lua 对象
- Lua 对象内省
- Lua 5.2 - C++对象中的对象(使用 lua_lightuserdata)
- 无法修改传递给 lua 的对象
- 如何从Lua中提取C++对象指针