由 Lua 取得值

lua-users home
wiki

由 dostring 傳回值

問題:我要如何從 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) );
一般而言,你應該使用堆疊中 k 個頂端的數值,其中 k 是在呼叫 lua_dostring 前後呼叫 lua_gettop(L) 的差異,亦即 -1 至 -k 的指標。


注意: 這些範例是針對 Lua 4.0。VersionNotice


針對 Lua 5.0 的範例程式碼

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 5.1.1 的範例程式碼

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;
}


RecentChanges · 喜好設定
編輯 · 歷程記錄
由 GMT 2010 年 2 月 17 日下午 12:35 最近一次編輯 (差異)