我有一些多次使用的lua脚本。我不想每次在脚本之间更改时都使用 luaL_load 。例如:
load script1
run script1
load script2
run script2
load script1
run script1
我想保留对 script1 的引用或其他内容,以便能够运行它而无需再次加载它。这可能吗?我是 lua 新手,也许这个问题很愚蠢......但对我来说,这似乎是一个很好的优化,可以避免加载经常使用的脚本。我希望上面的代码变成这样:
load script1
load script2
set current script script1
run script1
set current script script2
run script2
set current script script1
run script1
最佳答案
好吧,您需要做的就是保存 luaL_loadfile
的已编译 block 。压入堆栈。为此,您可以使用 lua_pushvalue(L,-1)
在堆栈顶部制作已编译 block 的副本(因为 luaL_ref
会弹出它),以及 int luaL_ref(L,LUA_REGISTRYINDEX)
在注册表中获取对其的引用。每当您需要该 block 时,您可以使用 lua_rawgeti(L,LUA_REGISTRYINDEX, refToChunk)
,这会将 block 推回到堆栈上,为lua_call
做好准备。正在学习它。
关于scripting - 缓存lua脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5243775/