記錄lua CAPI的使用
兩個函數的聲明如下
void lua_gettable(lua_State *L, int index);
void lua_settable (lua_State *L, int index);
在lua文件中定義了一個全局info表,如果我們想要在c++中獲取lua表中字段,這時候lua_gettable這個函數就可以派上用場了;首先我們先清空棧,然后注冊info到棧中,此時info處於棧頂,用負數下標表示法為-1,壓入想要找的字段name(以字符串形式), 此時棧中有兩個元素 分別為棧頂-1 “name”,-2 info表;此時調用lua_gettable,參數中的index指定當前info表下標,執行接收后會把棧頂的”name" 替換為info中的name字段值”xy”;至此實現c++中獲取lua表字段值。
為了簡便使用lua還提供了一個函數lua_getfield,功能和lua_gettable一樣
;
lua_settable會把棧頂作為value,棧頂的下一個位置作為key設置到index指向的table,最后把這兩個彈出彈出棧,這時候settable完成。
什么意思呢,在我們的例子中棧有三個元素,-1將作為value,-2作為key,-3是指定要操作的表,即 (table[key] = value)
該函數的index同樣是指定表在棧中所在的下標;至此將lua info表中的name字段該為success;
同樣的有一個lua_setfield函數,多了一個參數指定要更改的字段名