我有一些多次使用的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
答案 0 :(得分:6)
好吧,您需要做的就是保存luaL_loadfile
推送到堆栈的已编译块。为此,您可以使用lua_pushvalue(L,-1)
在堆栈顶部复制已编译的块(因为luaL_ref
将弹出它),并int luaL_ref(L,LUA_REGISTRYINDEX)
来获取对它的引用在注册表中。每当你需要块时,你可以使用lua_rawgeti(L,LUA_REGISTRYINDEX, refToChunk)
,它会将块推回堆栈,准备好lua_call
。