Re: [心得] Lua學習筆記

看板Programming作者 (ragingbull)時間16年前 (2009/07/27 14:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
圖文: http://effective.pixnet.net/blog/post/26970839 Lua和C++(或其他語言)之間的資料交換,倚賴Stack機制。 這個Stack的索引是1-Base的,從Top往下算的話,可以使用負數索引-1, -2,...,如下面 的示意圖: 打開lua.h,我們可以看到許多堆疊處理的API。 首先,維護類的API完成例行的維護工作: int (lua_gettop) (lua_State *L); /// 取得元素總數 void (lua_settop) (lua_State *L, int idx); /// 改變Top,因此捨棄了頂端的元素 void (lua_pushvalue) (lua_State *L, int idx); /// 將 idx位置的元素置頂,因此原先上方的元素往下移 void (lua_remove) (lua_State *L, int idx); /// 將idx位置的元素移除,因此原先上方的元素往下移 void (lua_insert) (lua_State *L, int idx); /// 將top元素移至idx位置,原先idx以上(含)的元素往上移 void (lua_replace) (lua_State *L, int idx); /// 將top元素取出,並設定到idx位置 int (lua_checkstack) (lua_State *L, int sz); /// 檢查Stack空間大小 void (lua_xmove) (lua_State *from, lua_State *to, int n); /// 搬移一些元素 詢問類的API幫助查詢stack的元素特性: int (lua_isnumber) (lua_State *L, int idx); /// 是否能轉成數字 int (lua_isstring) (lua_State *L, int idx); /// 是否能轉成字串 int (lua_iscfunction) (lua_State *L, int idx); /// 是否為函式 int (lua_isuserdata) (lua_State *L, int idx); /// 是否為自訂類 int (lua_type) (lua_State *L, int idx); /// 傳回類型 const char *(lua_typename) (lua_State *L, int tp); /// 傳回類型 名稱 int (lua_equal) (lua_State *L, int idx1, int idx2); /// 比 較內容(使用lua的==運算) int (lua_rawequal) (lua_State *L, int idx1, int idx2); /// 比對原 始內容 int (lua_lessthan) (lua_State *L, int idx1, int idx2); /// 比較大 小(使用lua的<運算) 轉換類的API(Stack -> C)幫助我們取得stack的元素: lua_Number (lua_tonumber) (lua_State *L, int idx); /// 轉 為數字(浮點數double) lua_Integer (lua_tointeger) (lua_State *L, int idx); /// 轉為整數 int (lua_toboolean) (lua_State *L, int idx); /// 轉為布林 const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); /// 轉 為字串 size_t (lua_objlen) (lua_State *L, int idx); /// 轉為物件長度(字串長度或userdata大小,其他類型傳回0) lua_CFunction (lua_tocfunction) (lua_State *L, int idx); /// 轉 為C函式指標 void *(lua_touserdata) (lua_State *L, int idx); /// 傳回userdata的指標(如果合法) lua_State *(lua_tothread) (lua_State *L, int idx); /// 傳回lua thread指標 const void *(lua_topointer) (lua_State *L, int idx); /// 傳回指標(可以是userdata, thread, talbe, 或fucntion) 此外還有一大堆用來處理Push(C->Stack)、Get(Lua->Stack)、Set(Stack->Lua)、Call、 Coroutine、垃圾回收等,可自行參考lua.h,配合Lua Manual當可了解它們的用途。 -- http://effective.pixnet.net/blog -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.208.83.253
文章代碼(AID): #1ARKyOsN (Programming)
文章代碼(AID): #1ARKyOsN (Programming)