最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

獲取Lua表結(jié)構(gòu)(table)數(shù)據(jù)實(shí)例

 更新時(shí)間:2014年09月12日 12:09:18   作者:笨木頭  
這篇文章主要介紹了獲取Lua表結(jié)構(gòu)(table)數(shù)據(jù)實(shí)例,本文使用lua_gettable函數(shù)獲取表結(jié)構(gòu),需要的朋友可以參考下

只是獲取一個(gè)全局變量什么的太沒意思了,今天我們來(lái)玩?zhèn)€高難度的——獲取Lua表結(jié)構(gòu)的數(shù)據(jù)。
(旁白:O O!我是不是該說(shuō)點(diǎn)什么?)

上一章傳送門:http://www.fzitv.net/article/55093.htm

1. 什么是table

table是Lua里最強(qiáng)大的數(shù)據(jù)類型,我們可以當(dāng)成是數(shù)組,但是它又和數(shù)組有點(diǎn)不一樣,建議大家看看Lua的語(yǔ)法教程,因?yàn)槲覍?duì)table也沒有熟悉到可以給大家解釋的程度。
(旁白:那你還寫什么教程。。。)

2. 獲取table變量

現(xiàn)在,我們給helloLua.lua文件添加一個(gè)table全局變量:

復(fù)制代碼 代碼如下:
-- helloLua.lua文件
myName = "beauty girl"

helloTable = {name = "mutou", IQ = 125}


我們看到,多了一個(gè)helloTable的變量,它和數(shù)組十分相似,又和HashMap有點(diǎn)類似,總之它很強(qiáng)大。

(旁白:我覺得亮點(diǎn)是,你的IQ有125?我覺得乘以2的話,還有點(diǎn)可能~?。?br /> 話說(shuō),125乘以2等于多少?…250 ….O O!
獲取helloTable變量的方式和以前是一樣的:

復(fù)制代碼 代碼如下:

/* 取得table變量,在棧頂 */
    lua_getglobal(pL, "helloTable");

這樣,helloTable變量就被存放到棧頂。
可我們并不是要取table變量,因?yàn)镃++中是無(wú)法識(shí)別Lua的table類型的,所以我們要取得table中具體的值,也就是name和IQ的值。

3. lua_gettable函數(shù)

有一個(gè)和lua_getglobal類似的函數(shù),叫做lua_gettable,顧名思義,它是用來(lái)取得table相關(guān)的數(shù)據(jù)的。
(旁白:廢話少點(diǎn)好吧= =)
 
lua_gettable函數(shù)會(huì)從棧頂取得一個(gè)值,然后根據(jù)這個(gè)值去table中尋找對(duì)應(yīng)的值,最后把找到的值放到棧頂。
lua_pushstring()函數(shù)可以把C++中的字符串存放到Lua的棧里;
然后再用lua_gettable()取執(zhí)行前面所說(shuō)的步驟,lua_gettable的第二個(gè)參數(shù)是指定的table變量在棧中的索引。
(旁白:小笨木,我被你繞暈了。。。)
 
為了照顧旁白這個(gè)笨蛋,我們畫個(gè)圖來(lái)理解:

這是初始狀態(tài),堆棧里還沒有任何東西,那么,現(xiàn)在要先把helloTable變量放到棧頂:

復(fù)制代碼 代碼如下:
/* 取得table變量,在棧頂 */
    lua_getglobal(pL, "helloTable");

然后就變成了這樣:

接著,我們要取得table的name對(duì)應(yīng)的值,那么,先要做的就是把”name”字符串入棧:

復(fù)制代碼 代碼如下:
/* 將C++的字符串放到Lua的棧中,此時(shí),棧頂變?yōu)椤皀ame”, helloTable對(duì)象變?yōu)闂5?*/
    lua_pushstring(pL, "name");

然后變成這樣:

(旁白:不帶這樣啊,你偷偷加上了棧的索引~?。?br />  
注意了,我把棧的索引也加上了,因?yàn)槲覀兗磳⒁褂?,這次我們用負(fù)數(shù)索引(不了解負(fù)數(shù)的索引的朋友請(qǐng)閱讀第03章的教程哈~)。
由于”name”的入棧,現(xiàn)在helloTable變量已經(jīng)不在棧頂了。
接著,我們調(diào)用要做最重要的一步了,取得name在table中對(duì)應(yīng)的值:

復(fù)制代碼 代碼如下:

/*
        從table對(duì)象尋找“name”對(duì)應(yīng)的值(table對(duì)象現(xiàn)在在索引為-2的棧中,也就是當(dāng)前的棧底),
        取得對(duì)應(yīng)值之后,將值放回棧頂
    */
    lua_gettable(pL, -2);

此時(shí),棧變成這樣:

(旁白:發(fā)生什么事?為什么“mutou”突然出現(xiàn)在棧頂?!為毛!是你自己畫上去的吧!)
 
lua_gettable倒底做了什么事情?
首先,我們來(lái)解釋一下lua_gettable的第二個(gè)參數(shù),-2是什么意思,-2就是剛剛helloTable變量在棧中的索引。
然后,Lua會(huì)去取得棧頂?shù)闹担ㄖ暗臈m斒恰眓ame”),然后拿著這個(gè)值去helloTable變量中尋找對(duì)應(yīng)的值,當(dāng)然就找到”mutou”了。
最后,Lua會(huì)把找到的值入棧,于是”mutou”就到了棧頂了。
(旁白:你妹紙的。。。沒事,我就罵罵人)
 
最后我們只需要取出棧頂?shù)臄?shù)據(jù)就可以了,完整代碼如下:

復(fù)制代碼 代碼如下:

/* 初始化 */
    lua_State* pL = lua_open();
    luaopen_base(pL);

    /* 執(zhí)行腳本 */
    luaL_dofile(pL, "helloLua.lua");

    /* 取得table變量,在棧頂 */
    lua_getglobal(pL, "helloTable");

    /* 將C++的字符串放到Lua的棧中,此時(shí),棧頂變?yōu)椤皀ame”, helloTable對(duì)象變?yōu)闂5?*/
    lua_pushstring(pL, "name");

    /*
        從table對(duì)象尋找“name”對(duì)應(yīng)的值(table對(duì)象現(xiàn)在在索引為-2的棧中,也就是當(dāng)前的棧底),
        取得對(duì)應(yīng)值之后,將值放回棧頂
    */
    lua_gettable(pL, -2);

    /* 現(xiàn)在表的name對(duì)應(yīng)的值已經(jīng)在棧頂了,直接取出即可 */
    const char* sName = lua_tostring(pL, -1);
    CCLOG("name = %s", sName);


好了,本章到此結(jié)束。

  • Lua中string.len()使用指南

    Lua中string.len()使用指南

    Lua 字符串庫(kù)中的所有函數(shù)都導(dǎo)出在模塊 string 中,今天我們先來(lái)看看string.len()的使用,有需要的小伙伴可以參考下
    2016-08-08
  • Lua教程(九):元表與元方法詳解

    Lua教程(九):元表與元方法詳解

    這篇文章主要介紹了Lua教程(九):元表與元方法詳解,本文講解了算術(shù)類的元方法、關(guān)系類的元方法、庫(kù)定義的元方法、table訪問的元方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua教程(三):表達(dá)式和語(yǔ)句

    Lua教程(三):表達(dá)式和語(yǔ)句

    這篇文章主要介紹了Lua教程(三):表達(dá)式和語(yǔ)句,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、字符串連接、table構(gòu)造器、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼

    Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼

    這篇文章主要介紹了Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • ubuntu 14.04下熟悉lua的語(yǔ)法

    ubuntu 14.04下熟悉lua的語(yǔ)法

    擺在本人目前來(lái)說(shuō)最大的困難就是迅速熟悉Lua語(yǔ)言,后續(xù)的一切工作才有可能,所以必須現(xiàn)在電腦上安裝好Lua開發(fā)環(huán)境,之后program with Lua,我們先來(lái)熟悉下lua的語(yǔ)法吧。
    2015-04-04
  • Lua教程(二十一):編寫C函數(shù)的技巧

    Lua教程(二十一):編寫C函數(shù)的技巧

    這篇文章主要介紹了Lua教程(二十一):編寫C函數(shù)的技巧,本文講解了數(shù)組操作、字符串操作、在C函數(shù)中保存狀態(tài)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua利用cjson讀寫json示例分享

    Lua利用cjson讀寫json示例分享

    本文結(jié)合本人的實(shí)際使用經(jīng)驗(yàn)和代碼示例,介紹如何在Lua中對(duì)json進(jìn)行encode和decode,需要的朋友可以參考下
    2014-11-11
  • Lua中的變量類型與語(yǔ)句學(xué)習(xí)總結(jié)

    Lua中的變量類型與語(yǔ)句學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Lua中的變量類型與語(yǔ)句學(xué)習(xí)總結(jié),總結(jié)了Lua入門過(guò)程中的一些基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-06-06
  • 最新評(píng)論

    寿宁县| 梁河县| 四川省| 修水县| 时尚| 张家港市| 泽普县| 武定县| 西贡区| 广南县| 浦北县| 宝山区| 朝阳区| 巩留县| 花垣县| 富阳市| 静宁县| 玉溪市| 德保县| 同江市| 彝良县| 临澧县| 赞皇县| 确山县| 九台市| 改则县| 灌南县| 云安县| 台州市| 灵山县| 景谷| 崇州市| 海城市| 鄯善县| 任丘市| 垦利县| 策勒县| 房山区| 桦川县| 封丘县| 潜江市|