Lua api(五) lua_rawgeti/lua_rawseti

前言#

看了前幾篇自己總結(jié)的文章虑瀑,我發(fā)現(xiàn)了一個問題逛拱,那就是從標(biāo)題上不能直接的看出文章所講的內(nèi)容敌厘,所以從這一章開始我要改變標(biāo)題的風(fēng)格,直接把要總結(jié)的api列在標(biāo)題上朽合,這樣看起來更醒目俱两,也更容易查找饱狂。

言歸正傳,前兩章我們講了對通用table的操作锋华,然而我們知道在table中有個特例是我們使用頻率相當(dāng)高的嗡官,那就是數(shù)組箭窜,數(shù)組本來就是“一串”的毯焕,有沒有更簡便的存取方法呢,答案當(dāng)然是肯定的磺樱,lua為我們提供了以下兩個api可以直接對數(shù)組進行操作纳猫。

內(nèi)容#


lua_rawgeti##

  • 原型:void lua_rawgeti (lua_State *L, int index, int n);
  • 解釋:把 t[n] 的值壓棧, 這里的 t 是指給定索引 index 處的一個值竹捉。 這是一個直接訪問芜辕,它不會觸發(fā)元方法。

lua_rawseti##

  • 原型:void lua_rawseti (lua_State *L, int index, int n);
  • 解釋: 等價于 t[n] = v块差, 這里的 t 是指給定索引 index 處的一個值侵续, 而 v 是棧頂?shù)闹怠:瘮?shù)將把這個值彈出棧憨闰。 賦值操作是直接的状蜗,不會觸發(fā)元方法。

Usage##

  • 首先我們來新建一個文件鹉动,文件命名為rawgetitest.lua編寫如下代碼:
-- 定義一個全局table
LanguagesTable = 
{
    "lua",
    "c",
    "c++",
    "java",
    "python",
}

-- 定義一個打印函數(shù)
function func_printarray()
    print("\n");
    for index,value in pairs(LanguagesTable) do
        print("["..index.."] = ".. value);
    end
end
  • 然后我們編寫c++代碼如下:
    lua_State *L = lua_open();
    luaL_openlibs(L);

    luaL_dofile(L,"rawgetitest.lua");   // 加載執(zhí)行l(wèi)ua文件
    lua_getglobal(L,"LanguagesTable");  // 將全局表壓入棧


    lua_rawgeti(L, -1, 2);              // 取LanguagesTable[2]的值-->lua_rawgeti用法
    if(lua_isnil(L, -1))
    {
        printf("c++ --> [2] = nil\n");
    }
    else
    {
        printf("c++ --> [2] = %s\n", lua_tostring(L, -1));
    }
    lua_pop(L,1);                       // 彈出棧頂變量


    lua_getglobal(L, "func_printarray");// 改變之前先調(diào)用打印函數(shù)轧坎,查看原數(shù)組
    lua_pcall(L, 0, 0, 0);

    lua_pushstring(L, "php");           // 將要賦值的結(jié)果壓入棧
    lua_rawseti(L, -2, 4);              // 賦值操作             -->lua_rawseti用法

    lua_pushstring(L, "swift");         // 將要賦值的結(jié)果壓入棧
    lua_rawseti(L, -2, 8);              // 賦值操作             -->lua_rawseti用法

    lua_getglobal(L, "func_printarray");// 改變之后再調(diào)用打印函數(shù),查看改變后的結(jié)果
    lua_pcall(L, 0, 0, 0);

    lua_close(L);                       //關(guān)閉lua環(huán)境  
  • 結(jié)果
rawgeti.png

總結(jié)#

  • 從api的名字我們可以看到這兩個方法是帶有“raw”前綴的泽示,可以推斷出這兩個方法不會調(diào)用table的元方法缸血。
  • 既然是對數(shù)組進行操作,那么肯定少不了對下標(biāo)的使用械筛,兩個api函數(shù)的第3個參數(shù)都表示下標(biāo)捎泻,注意table數(shù)組的下標(biāo)是從1開始的。
  • 從結(jié)果可以看到我們可以直接按下標(biāo)進行修改埋哟,并且下標(biāo)可以是不連續(xù)的族扰。
  • 注意數(shù)組不連續(xù)時遍歷table的方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末定欧,一起剝皮案震驚了整個濱河市渔呵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砍鸠,老刑警劉巖扩氢,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爷辱,居然都是意外死亡录豺,警方通過查閱死者的電腦和手機朦肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双饥,“玉大人媒抠,你說我怎么就攤上這事∮交ǎ” “怎么了趴生?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昏翰。 經(jīng)常有香客問我苍匆,道長,這世上最難降的妖魔是什么棚菊? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任浸踩,我火速辦了婚禮,結(jié)果婚禮上统求,老公的妹妹穿的比我還像新娘检碗。我一直安慰自己,他們只是感情好码邻,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布折剃。 她就那樣靜靜地躺著,像睡著了一般冒滩。 火紅的嫁衣襯著肌膚如雪微驶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天开睡,我揣著相機與錄音因苹,去河邊找鬼。 笑死篇恒,一個胖子當(dāng)著我的面吹牛扶檐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胁艰,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼款筑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腾么?” 一聲冷哼從身側(cè)響起奈梳,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎解虱,沒想到半個月后攘须,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡殴泰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年于宙,在試婚紗的時候發(fā)現(xiàn)自己被綠了浮驳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捞魁,死狀恐怖至会,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谱俭,我是刑警寧澤奉件,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站旺上,受9級特大地震影響瓶蚂,放射性物質(zhì)發(fā)生泄漏糖埋。R本人自食惡果不足惜宣吱,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞳别。 院中可真熱鬧征候,春花似錦、人聲如沸祟敛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馆铁。三九已至跑揉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠巨,已是汗流浹背历谍。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辣垒,地道東北人望侈。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像勋桶,于是被迫代替她去往敵國和親脱衙。 傳聞我的和親對象是個殘疾皇子霸株,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容