c++遍曆lua table樣本_C 語言

來源:互聯網
上載者:User

c/c++從棧上擷取Lua壓棧過來的table資料

複製代碼 代碼如下:

map<string,string> traverse_table(lua_State *L, int index)
{
 map<string,string> data;
    lua_pushnil(L);
    // 現在的棧:-1 => nil; index => table
 index = index - 1;
    while (lua_next(L, index))
    {
        // 現在的棧:-1 => value; -2 => key; index => table
        // 拷貝一份 key 到棧頂,然後對它做 lua_tostring 就不會改變原始的 key 值了
        lua_pushvalue(L, -2);
        // 現在的棧:-1 => key; -2 => value; -3 => key; index => table

        const char* key = lua_tostring(L, -1);
        const char* value = lua_tostring(L, -2);

  data[key]=value;
        // 彈出 value 和拷貝的 key,留下原始的 key 作為下一次 lua_next 的參數
        lua_pop(L, 2);
        // 現在的棧:-1 => key; index => table
    }
    // 現在的棧:index => table (最後 lua_next 返回 0 的時候它已經把上一次留下的 key 給彈出了)
    // 所以棧已經恢複到進入這個函數時的狀態
 return data;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.