Scripting 缓存lua脚本

Scripting 缓存lua脚本,scripting,lua,Scripting,Lua,我有一些被多次使用的lua脚本。我不想每次在脚本之间更改时都使用luaL_load。例如: load script1 run script1 load script2 run script2 load script1 run script1 我想保留对script1的引用或其他内容,以便在不重新加载的情况下运行它。这可能吗?我是lua的新手,也许这个问题很愚蠢。。。但对我来说,这似乎是一个很好的优化,可以避免在经常使用脚本时加载脚本。我希望上面的代码可以像这样交进去: load script1

我有一些被多次使用的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
推送到堆栈上的编译块。要做到这一点,您可以使用
lua\u pushvalue(L,-1)
在堆栈顶部创建已编译块的副本(因为
luaL\u ref
将弹出它),并使用
int luaL\u ref(L,lua\u registeryindex)
在注册表中获取对它的引用。每当需要块时,可以使用
lua\u rawgeti(L,lua\u registeryindex,refToChunk)
,它会将块推回到堆栈上,准备
lua\u调用它。
阅读此文后,refToChunk似乎是对某个内部lua结构(编译块)的引用。是否可以删除此内部结构?我想用它来释放一个块使用的内存,在我使用完它之后,我会用
luaL\u unref
来完成。如果没有对该块的其他引用,则当GC遇到它时,它将被删除。您可能对弱表和垃圾收集感兴趣。