資源描述:
《Lua API 小記》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、《LuaAPI小記》轉載自RingOfTheC[ring.of.the.c@gmail.com]一、第一部分(API)這些東西是平時遇到的,覺得有一定的價值,所以記錄下來,以后遇到類似的問題可以查閱,同時分享出來也能方便需要的人,轉載請注明來自RingOfTheC[ring.of.the.c@gmail.com]打算記錄一些lua_api,可能會覺得lua文檔中已經說的很清楚了,但是我將用自己的方式,記錄下我認為重要的東西,先約定一下api說明的格式編號.api作用簡述api函數原型api操作說明返回值說明對棧的影響注意事項1.建一個新表voidlu
2、a_createtable(lua_State*L,intnarr,intnrec)創(chuàng)建一個新的table,并把它放在棧頂.narr和nrec分別指定該table的array部分和hash部分的預分配元素數量無返回值棧高度+1,棧頂元素是新table#definelua_newtable(L)lua_createtable(L,0,0)常用這個2.取表中的元素voidlua_getfield(lua_State*L,intindex,constchar*k)操作:arr=Stack[index]//arr肯定是表Stack.push(arr[k])取
3、表中鍵為k的元素,這里的表是由index指向的棧上的一個表無返回值棧高度+1,棧頂元素是(Stack[index])[k]注意,該操作將觸發(fā)__index元方法3.給表中的元素賦值voidlua_setfield(lua_State*L,intindex,constchar*k)操作:arr=Stack[index]arr[k]=Stack.top()Stack.pop()給表中鍵為k的元素賦值value(value就是棧頂元素),這里的表是由index指向的棧上的一個表無返回值棧高度-1,被彈出的是value注意,該操作將觸發(fā)__newindex元
4、方法4.取表元素和表元素賦值voidlua_gettable(lua_State*L,intindex)操作:ele=Stack[index]key=Stack.top()Stack.pop()value=ele[key]Stack.push(value)根據index指定取到相應的表;取棧頂元素為key,并彈出棧;獲取表中key的值壓入棧頂.無返回值棧高度不變,但是發(fā)生了一次彈出和壓入的操作,彈出的是key,壓入的是value注意,該操作將觸發(fā)__index元方法voidlua_settable(lua_State*L,intindex)操作:el
5、e=Stack[index]value=Stack.top()Stack.pop()key=Stack.top()Stack.pop()ele[key]=value根據index指定取到相應的表;取棧頂元素做value,彈出之;再取當前棧頂元素做key,亦彈出之;然后將表的鍵為key的元素賦值為value無返回值棧高度-2,第一次彈出value,第二次彈出key注意,該操作將觸發(fā)__newindex元方法5.對table的一些操作[不引發(fā)原方法]voidlua_rawget(lua_State*L,intindex)和lua_gettable操作一樣
6、但是不觸發(fā)相應的元方法voidlua_rawgeti(lua_State*L,intindex,intn)操作:ele=Stack[index]value=ele[n]Stack.push(value)無返回值棧+1,棧頂新增元素就是value不觸發(fā)相應的元方法voidlua_rawset(lua_State*L,intindex)和lua_settable操作一樣但是不觸發(fā)相應的原方法voidlua_rawseti(lua_State*L,intindex,intn)操作:ele=Stack[index]value=Stack.top()Stack
7、.pop()ele[n]=value無返回值棧-1,棧頂將value彈出不觸發(fā)相應的元方法6.復制棧上元素并壓入棧voidlua_pushvalue(lua_State*L,intindex)操作:value=Stack[index]Stack.push(value)無返回值棧+17.創(chuàng)建一個元表intluaL_newmetatable(lua_State*L,constchar*tname)操作:1.在注冊表中查找tname,如果已經注冊,就返回0,否者繼續(xù),并平棧lua_getfield(L,LUA_REGISTRYINDEX,tname)if(
8、!lua_isnil(L,-1))return0;lua_pop(L,1);2.創(chuàng)建一個表,并注冊,返回1l