校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 獲取Lua表結構(table)數據實例

獲取Lua表結構(table)數據實例

熱門標簽:智能語音電銷的機器人 揚州電銷外呼系統軟件 百度地圖標注位置網站 武漢百應人工智能電銷機器人 上海企業外呼系統排名 400手機電話免費辦理 開通400電話申請流程 如何利用高德地圖標注家 電腦外呼系統輻射大嗎

只是獲取一個全局變量什么的太沒意思了,今天我們來玩個高難度的——獲取Lua表結構的數據。
(旁白:O O!我是不是該說點什么?)

上一章傳送門:https://www.jb51.net/article/55093.htm

1. 什么是table

table是Lua里最強大的數據類型,我們可以當成是數組,但是它又和數組有點不一樣,建議大家看看Lua的語法教程,因為我對table也沒有熟悉到可以給大家解釋的程度。
(旁白:那你還寫什么教程。。。)

2. 獲取table變量

現在,我們給helloLua.lua文件添加一個table全局變量:

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

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


我們看到,多了一個helloTable的變量,它和數組十分相似,又和HashMap有點類似,總之它很強大。

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

復制代碼 代碼如下:

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

這樣,helloTable變量就被存放到棧頂。
可我們并不是要取table變量,因為C++中是無法識別Lua的table類型的,所以我們要取得table中具體的值,也就是name和IQ的值。

3. lua_gettable函數

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

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

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

然后就變成了這樣:

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

復制代碼 代碼如下:
/* 將C++的字符串放到Lua的棧中,此時,棧頂變為“name”, helloTable對象變為棧底 */
    lua_pushstring(pL, "name");

然后變成這樣:

(旁白:不帶這樣啊,你偷偷加上了棧的索引~!)
 
注意了,我把棧的索引也加上了,因為我們即將要使用,這次我們用負數索引(不了解負數的索引的朋友請閱讀第03章的教程哈~)。
由于”name”的入棧,現在helloTable變量已經不在棧頂了。
接著,我們調用要做最重要的一步了,取得name在table中對應的值:

復制代碼 代碼如下:

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

此時,棧變成這樣:

(旁白:發生什么事?為什么“mutou”突然出現在棧頂?!為毛!是你自己畫上去的吧!)
 
lua_gettable倒底做了什么事情?
首先,我們來解釋一下lua_gettable的第二個參數,-2是什么意思,-2就是剛剛helloTable變量在棧中的索引。
然后,Lua會去取得棧頂的值(之前的棧頂是”name”),然后拿著這個值去helloTable變量中尋找對應的值,當然就找到”mutou”了。
最后,Lua會把找到的值入棧,于是”mutou”就到了棧頂了。
(旁白:你妹紙的。。。沒事,我就罵罵人)
 
最后我們只需要取出棧頂的數據就可以了,完整代碼如下:

復制代碼 代碼如下:

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

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

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

    /* 將C++的字符串放到Lua的棧中,此時,棧頂變為“name”, helloTable對象變為棧底 */
    lua_pushstring(pL, "name");

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

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


好了,本章到此結束。

您可能感興趣的文章:
  • Lua的table庫函數insert、remove、concat、sort詳細介紹
  • Lua中table的幾種構造方式詳解
  • Lua中對table排序實例
  • Lua中遍歷數組和table的4種方法
  • Lua中的table學習筆記
  • Lua中使用table.concat連接大量字符串實例
  • Lua中的table淺析
  • Lua判斷Table是否為空的方法(空的table即{})
  • Lua中使用table實現的其它5種數據結構
  • 深入談談lua中神奇的table

標簽:宜賓 嘉峪關 延邊 江西 張掖 新余 黑龍江 武漢

巨人網絡通訊聲明:本文標題《獲取Lua表結構(table)數據實例》,本文關鍵詞  獲取,Lua,表,結構,table,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《獲取Lua表結構(table)數據實例》相關的同類信息!
  • 本頁收集關于獲取Lua表結構(table)數據實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 岫岩| 高邮市| 南昌县| 腾冲县| 阿城市| 汤阴县| 交口县| 克东县| 西充县| 禄劝| 湾仔区| 张家口市| 舒兰市| 商水县| 从化市| 彝良县| 杭州市| 林甸县| 临城县| 贵溪市| 阿鲁科尔沁旗| 海阳市| 通山县| 高邑县| 井陉县| 黄大仙区| 昌江| 海门市| 富平县| 衡南县| 惠州市| 紫云| 新干县| 中西区| 晴隆县| 来宾市| 晋中市| 通渭县| 贵州省| 彭泽县| 和平区|