我可能误解了它们的使用或误读了文档,但我如何访问作为轻量用户数据传递给 Lua 的结构或类的成员?例如,如果一个 vector 使用以下结构
typedef struct Foo {
int x;
int y;
} Foo;
被声明为“测试”并定义为类似 x = 413 和 y = 612 的内容,并通过调用推送
lua_pushlightuserdata( L, (void *) &test ) ;
操作或打印 x 和 y 的函数的 Lua 代码是什么样的?
最佳答案
Lua 中的Light userdata 只是一个指针。 Lua 不理解如何读取指针引用的对象的内容。此数据的目的是允许一个 C API 调用将引用传递给另一个 API 调用。
如果你想在 Lua 中处理数据,你需要将它压入栈中,在你的情况下我会把它做成一个表。如果您需要在 C 和 Lua 之间同步此数据,那么您需要在双方编写函数来处理分配并将值复制到其他环境。另一种选择是仅将数据保存在 Lua 中并在 C 中通过 Lua API 检索它,或者将其保存在 C 中并在 Lua 中通过(您将创建的)C API 检索它。
欲了解更多信息,Programming in Lua和 Lua-users Wiki每个都有简短的描述。
关于c++ - 在 Lua 中访问 Light 用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308135/