【问题标题】:caching lua scripts缓存lua脚本
【发布时间】:2011-03-09 09:35:08
【问题描述】:

我有一些多次使用的 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

【问题讨论】:

    标签: scripting lua


    【解决方案1】:

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

    【讨论】:

    • 读完后似乎 refToChunk 是对一些内部 lua 结构(编译后的块)的引用。是否可以删除此内部结构?我想用它来释放一块在我完成后使用的内存
    • 当然,我会用luaL_unref 来完成。如果没有其他对该chunk的引用,则在GC遇到它时将其删除。您可能对chapter 17 of PiL 感兴趣,了解弱表和垃圾回收。
    猜你喜欢
    • 2018-11-20
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2015-03-06
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多