c,c++調用lua腳本,並傳入table,for循環構造table

使用c 和c++調用lua腳本時,有時需要傳入比較複雜的參數,所以先轉化成table比較好:

c++代碼:

好多代碼都是連續很多語句壓棧,但是有時候不確定長度的時候就顯得很不好用,使用for循環就比較好。要注意的是,每次入棧key-value鍵值對,都需要將他們彈出放入table,如下:

#include <stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<iostream>
#include<string.h>
using namespace std;
extern "C"{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}


int main()
{

    lua_State * L=NULL;

    /* 初始化 Lua */  
    //  L = lua_open();  
    L =luaL_newstate();
    /* 載入Lua基本庫 */  
    luaL_openlibs(L);
    /* 運行腳本 */  
    luaL_dofile(L, "func.lua"); 

    for(int i=1;i<=4;i++){
        lua_getglobal(L,"mytable");
        lua_pushnumber(L, i);           // 將要賦值的結果壓入棧
        lua_pushnumber(L, i+10);              // 賦值操作             -->lua_rawseti用法
        lua_settable(L, -3);
    }
    lua_getglobal(L,"structTest");
    lua_pcall(L, 0, 0, 0);  
    lua_close(L);
    return 1;
}

lua腳本:

mytable = {}

function structTest()
    
    print("lua script func.lua have been load ")
    for k, v in pairs(mytable) do
        print("key: ".. k)
        print("val: ".. v)
        print()
    end 
end

結果:

key: 1
val: 11.0

key: 2
val: 12.0

key: 3
val: 13.0

key: 4
val: 14.0
c遍歷table:

// 進行下面步驟前先將 table 壓入棧頂 
 int nIndex = lua_gettop( pLua );  // 取 table 索引值 
 lua_pushnil( pLua );  // nil 入棧作爲初始 key 
 while( 0 != lua_next( pLua, nIndex ) ) 
 { 
     // 現在棧頂(-1)是 value,-2 位置是對應的 key 
     // 這裏可以判斷 key 是什麼並且對 value 進行各種處理 
     lua_pop( pLua, 1 );  // 彈出 value,讓 key 留在棧頂 
 } 
 // 現在棧頂是 table

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章