缓存lua脚本

Mir*_*pas 1 scripting lua

我有一些lua脚本多次使用.每次我在脚本之间进行更改时,我都不想使用luaL_load.例如:


load script1
run script1
load script2
run script2
load script1
run script1
Run Code Online (Sandbox Code Playgroud)

我想保留一个引用或者某些东西给script1,以便能够在不重新加载的情况下运行它.这可能吗?我是lua的新手,也许这个问题很愚蠢...但对我而言,如果经常使用脚本,则避免加载脚本似乎是一个很好的优化.我希望上面的代码可以像这样:

load script1
load script2

set current script script1
run script1
set current script  script2
run script2
set current script  script1
run script1
Run Code Online (Sandbox Code Playgroud)

jpj*_*obs 6

好吧,您需要做的就是保存luaL_loadfile推送堆栈的已编译块.为此,您可以使用lua_pushvalue(L,-1)在堆栈顶部制作已编译块的副本(因为luaL_ref将弹出它),并int luaL_ref(L,LUA_REGISTRYINDEX)在注册表中获取对它的引用.每当你需要你可以使用的块时lua_rawgeti(L,LUA_REGISTRYINDEX, refToChunk),它会将块推回堆栈,准备好lua_call它.