2017-03-01 1 views
2

이 작동루아의 "dofile"과 C API의 "luaL_dofile"의 차이점은 무엇입니까?</p> <pre><code>luaL_dostring(lua, "dofile('mnemonics.lua')"); </code></pre> <p>을하지만이 파일을 실행하는 데 실패 : 루아 5.3.4 C API를 사용하여

luaL_dofile(lua, "mnemonics.lua"); 

는 대신, "문자열 값을 호출하는 시도"를보고합니다.

나는

luaL_loadfile(lua, "mnemonics.lua"); 

LUA_OK을 반환로 교체 할 때,하지만 돼있처럼 스택에 함수를 밀어하지 않습니다. 사실 스택은 나중에 비어 있습니다 (gettop보고 0).

나는 dostring 해결 방법을 사용할 수 있지만, 뭔가 빠졌거나 버그가 있습니다.

+3

정말 이상합니다. 야생 추측 : C 코드에서 일찍 일어난 일이'lua' 상태를 손상 시켰습니까? Valgrind로 프로그램을 실행 해보십시오. –

+5

내가 볼 수없는 문제를 재현하는 최소한의 예를 보여줄 수 있습니까? – greatwolf

+0

최소한의 예제를 검색 할 때이 문제는 빈 스택이 튀어 나와서 발생했음을 발견했습니다. 나는'lua_settable'에 대한 호출의 동작을 오해했습니다. C API 명령을 사용하지 않은 경우 Lua 명령이 작동하는 이유는 C 코드와 Lua 코드 간의 전환시 스택이 정리된다는 것입니다. – Octa9on

답변

0

빈 스택에서 팝하는 경우 예기치 않은 동작이 발생합니다. 루아 인터프리터는 C 코드 실행과 루아 코드 실행 사이의 스택을 정리하므로 엉망진창 스택은 루아의 dofile에 영향을 미치지 않습니다.