кеширование скриптов lua - PullRequest
1 голос
/ 09 марта 2011

У меня есть несколько сценариев 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

1 Ответ

6 голосов
/ 09 марта 2011

Ну, все, что вам нужно сделать, это сохранить скомпилированный кусок, который luaL_loadfile помещает в стек.Чтобы сделать это, вы можете использовать lua_pushvalue(L,-1), чтобы сделать копию скомпилированного чанка в верхней части стека (потому что luaL_ref его вытолкнет), и int luaL_ref(L,LUA_REGISTRYINDEX), чтобы получить ссылку на него в реестре.Всякий раз, когда вам нужен блок, вы можете использовать lua_rawgeti(L,LUA_REGISTRYINDEX, refToChunk), который вернет блок обратно в стек, готовый к lua_call его использованию.

...