1. 压入元素:
void lua_pushnil ( lua_State *L );
void lua_pushboolean ( lua_State *L, int bool );
void lua_pushnumber ( lua_State *L, lua_Number n );
void lua_pushinteger ( lua_State *L, lua_Integer );
void lua_pushlstring ( lua_State *L, const char *s, size_t len );
void lua_pushstring ( lua_State *L, const char *s );
2. 查询元素:
元素在 LUA 虚拟栈中的索引 ( 顶在最上 ) :
从上到下: -1 , -2 , -3…
从下到上: 1 , 2 , 3…
int lua_is* ( lua_State *L, int index );
int lua_toboolean ( lua_State *L, int index );
lua_Number lua_tonumber ( lua_State *L, int index );
lua_Integer lua_tointeger ( lua_State *L, int index );
const char *lua_tolstring ( lua_State *L, int index, int *len ); /* len 存储返回字符串的长度 */
size_t lua_objlen ( lua_State *L, int index );
int lua_type ( lua_State *, int index );
LUA_TNIL,
LUA_TBOOLEAN,
LUA_TNUMBER,
LUA_TSTRING,
LUA_TTABLE,
LUA_TTHREAD,
LUA_TUSERDATA,
LUA_TFUNCTION
3. LUA 虚拟栈操作:
int lua_gettop ( lua_State *L );
void lua_settop ( lua_State *L, int index );
void lua_pushvalue ( lua_State *L, int index ); /* 从 index 复制,压入栈顶 */
void lua_remove ( lua_State *L, int index ); /* 删除 index */
void lua_insert ( lua_State *L, int index ); /* 把栈顶元素插入 index */
void lua_replace ( lua_State *L, int index ); /* 用栈顶元素替换 index */
void lua_getglobal ( lua_State *L, char *varname ); /* 把 LUA 全局量压入栈顶 */
#define lua_pop ( L, n ) lua_settop ( L, -(n)-1 )
4. 调用 LUA 函数:
压入函数: lua_getglobal();
压入参数: lua_push*(); /* 逐个压入 */
调用函数: lua_pcall(); /* 或 lua_call() */
获取结果: re = lua_to*(L,-1); /* 从栈顶得到最后一个返回值 */
(一般还要将函数结果弹出, lua_pop(L,1) )
5. dofile 只是调用 loadfile ,并做了错误处理:
function dofile ( filename )
local f = assert ( loadfile ( filename ) )
return f()
end
6. loadstring ,调用 load ( loadfile 也是),但是速度较慢,并且如内部无声明一直在全局环境编译字符串。
7. LUA 将所有独立程序块视为一匿名函数的函数体,且该匿名函数有可变长实参。
8. 加载程序块后,要对其中函数进行定义后才能使用。
9. local f = package.loadlib ( path, funcname );
10. 若函数执行失败,返回的错误消息在最后一个返回值后面。