先看下面的C
程序(hello.c
):
#include <stdio.h>
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
int main(void)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_getglobal(L, "io");
lua_getfield(L, -1, "write");
lua_pushstring(L, "Hello\n");
lua_pcall(L, 1, 0, 0);
return 0;
}
lua_getglobal
函数定义如下:
void lua_getglobal (lua_State *L, const char *name);
Pushes onto the stack the value of the global name.
是把全局变量的值push
到堆栈里。在这个程序中,即是把io
这个table
的值存到堆栈中。
lua_getfield
函数定义如下:
void lua_getfield (lua_State *L, int index, const char *k);
Pushes onto the stack the value t[k], where t is the value at the given index. As in Lua, this function may trigger a metamethod for the "index" event
也即把堆栈中指定索引(index
)的table
中的key
为k
的值push
到堆栈。在程序中,即把io.write
函数存到堆栈中。
接下来lua_pushstring
是把io.write
函数的参数push
到堆栈,而lua_pcall
即执行io.write
函数。
执行结果:
[root@Fedora test]# ./hello
Hello