我如何预编译传递给luaL_loadbuffer()的Lua代码?

我正在使用 Lua "C" API 函数 luaL_loadbuffer() 运行 Lua 代码。

我有一小部分 Lua 代码块,我正在多次调用它们。但是每次调用 luaL_loadbuffer() 时,代码块都会被重新编译,这显然效率很低。大部分被代码块调用的代码都是预编译的,但为什么我需要每次重新编译代码块本身呢?我如何避免这种重新编译?

我能否将预编译的块传递给 luaL_loadbuffer()

我能否完全复制返回的 Lua 堆栈并重用它?

是否有其他巧妙的方法?

点赞
用户675723
用户675723

使用luaL_loadstring来加载你用luac预编译的二进制块。但要注意 - 这些二进制块在不同平台或Lua版本间是不可移植的。

2015-01-07 22:52:19
用户107090
用户107090

继续使用luaL_loadbuffer来加载脚本。这里的“加载”意味着“预编译”。只需将堆栈上剩余的函数保存在程序的某个位置(或者如果可以的话,保留在堆栈上)。当运行脚本的时候,使用lua_pushvaluelua_pcall

2015-01-08 00:02:09