Я встраиваю Lua в приложение C/C++. Там какой-либо путь состоит в том, чтобы вызвать функцию Lua от C/C++, не выполняя весь сценарий сначала?
Я попытался делать это:
//call lua script from C/C++ program
luaL_loadfile(L,"hello.lua");
//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);
Но это дает мне это:
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
Я могу только назвать панель (), когда я делаю это:
//call lua script from C/C++ program
luaL_dofile(L,"hello.lua"); //this executes the script once, which I don't like
//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);
Но это дает мне это:
hello
stackoverflow!!
Я желаю это:
stackoverflow!
Это - мой lua сценарий:
print("hello");
function bar()
print("stackoverflow!");
end
Как только что обсуждалось в #lua на freenode, luaL_loadfile просто компилирует файл в вызываемый фрагмент, в этот момент ни один код внутри файла не запускался (который включает определения функций) как таковой, чтобы получить определение of bar для выполнения фрагмента должен быть вызван (что и делает luaL_dofile).
Обнаружено, что для вызова функции необходимо запустить сценарий.