从 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) 与调用之后 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 · preferences
编辑 · 历史
最后编辑于 2010 年 2 月 17 日上午 6:35 GMT (差异)