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.
若函数执行失败,返回的错误消息在最后一个返回值后面。