现在的位置: 首页 > 综合 > 正文

LUA 学习笔记 03

2012年02月04日 ⁄ 综合 ⁄ 共 1615字 ⁄ 字号 评论关闭



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.

若函数执行失败,返回的错误消息在最后一个返回值后面。



抱歉!评论已关闭.