由 Lua 取得值 |
|
問題:我要如何從 C 方面取得由 lua_dostring
執行的 Lua 程式區塊的回傳值,亦即如何取得由 Lua dostring 函式回傳的結果?
(lhf) 就像任何函式的回傳值一樣。以下是一個範例
lua_State *L=lua_open(0); printf( "%d\n", lua_gettop(L) ); lua_dostring(L, "return 1,'a'" ); printf( "%d\n", lua_gettop(L) ); printf( "%s\n", lua_tostring(L,-2) ); printf( "%s\n", lua_tostring(L,-1) );
lua_dostring
前後呼叫 lua_gettop(L)
的差異,亦即 -1 至 -k 的指標。
returnone.c
#include <lua.h> #include <lualib.h> int main() { lua_State *L=lua_open(); printf( "%d\n", lua_gettop(L) ); lua_dostring(L, "return 1,'a'" ); printf( "%d\n", lua_gettop(L) ); printf( "%s\n", lua_tostring(L,-2) ); printf( "%s\n", lua_tostring(L,-1) ); return 0; }
編譯
gcc -o returnone returnone.c -I/usr/include/lua50 -llua50 -llualib50
執行: # ./returnone
0 2 1 a
lua_dostring() 已不存在
returnone.c
#include <lua.h> #include <lualib.h> #include <lauxlib.h> int main() { lua_State *L = luaL_newstate(); char buff[] = "return 1,'a'"; int error; printf( "%d\n", lua_gettop(L) ); error = luaL_loadbuffer(L, buff, strlen(buff), "my test") || lua_pcall(L, 0, LUA_MULTRET, 0); if (error) { fprintf(stderr, "%s", lua_tostring(L, -1)); lua_pop(L, 1); /* pop error message from the stack */ } printf( "%d\n", lua_gettop(L) ); printf( "%s\n", lua_tostring(L,-2) ); printf( "%s\n", lua_tostring(L,-1) ); return 0; }