LuaPlus學習(二)

來源:互聯網
上載者:User
     用lua做設定檔

    可以用lua做程式的設定檔。
    LuaPlus提供了讀寫lua指令檔的功能,我們可以將配置資訊以Table的形式儲存在lua指令碼中,然後利用LuaPlus進行讀取和更改。
    一、建立設定檔

    設定檔可以用文字編輯器建立,也可以在C++代碼中建立。我們先在C++中建立。利用CreateTable建立一個名為"Window"的表格,利用LuaObject的Set*函數設定表格內容,最後用DumpObject函數儲存到檔案。代碼如下:void SaveTable()
...{
    LuaStateOwner state;
    LuaObject myTable =  state->GetGlobals().CreateTable("Window");
    myTable.SetInteger("width", 640);
    myTable.SetInteger("height", 480);
    myTable.SetString("title", "My First Window");
    myTable.SetBoolean("enabled", true);
    myTable.SetInteger("alpha", 128);
    myTable.SetString("backgroundimage", "bg.jpg");

    state->DumpObject("FirstWindow.lua", "Window", state->GetGlobals()["Window"], 0);
}

    相關函數的說明參見文檔。
    二、讀取設定檔

    Lua設定檔的載入和其它指令檔一樣,可以用DoFile函數,然後可以用GetGlobals加索引的形式擷取表格LuaObject對象,最後用[ ]訪問表格的元素。代碼如下:void ReadShowTable()
...{
    LuaStateOwner state;
    state->DoFile("FirstWindow.lua");
    LuaObject myTable = state->GetGlobals()["Window"];

    //get Window Table's item
    printf("Window Table in FirstWindow.lua: ");
    printf("width = %d ", myTable["width"].GetInteger() );
    printf("height = %d ", myTable["height"].GetInteger() );
    printf("title = %s ", myTable["title"].GetString() );
    printf("enabled = %s ", myTable["enabled"].GetBoolean() ? "true" : "false" );
    printf("alpha = %d ", myTable["alpha"].GetInteger());
    printf("backgroundimage = %s ", myTable["backgroundimage"].GetString() );
}

    三、更改設定檔

    讀取設定檔的過程和上一節類似,更改與儲存和第一節類似。代碼如下:void RewriteTableContents()
...{

    LuaStateOwner state;
    state->DoFile("FirstWindow.lua");
    LuaObject myTable = state->GetGlobals()["Window"];
    myTable.SetInteger("width", 800);
    myTable.SetInteger("height", 600);
    printf("new width=%d, height=%d ",myTable["width"].GetInteger(), myTable["height"].GetInteger());
    state->DumpObject("FirstWindow.lua", "Window", state->GetGlobals()["Window"]);

}

    值得注意的是,更新設定檔時,不能單獨更新表格的某一個元素。我實驗了下,出錯。也許是我的方法不對。所以我現在一次更新整個表格。

    下面是main函數:
   

int _tmain(int argc, _TCHAR* argv[])
...{
    printf("now create table and save in FirstWindow.lua: ");
    SaveTable();

    printf("now read table from FirstWindow.lua: ");
    ReadShowTable();

    printf("now retrieve the table, change the "width" and "height" value, then save: ");
    RewriteTableContents();

    printf("now, re-read from FirstWindow.lua: ");
    ReadShowTable();

    return 0;
}

    工程的設定和上一篇文章一樣。
    F7編譯後CTRL+F5即可看到運行結果。

    值得注意的是,table可以嵌套table。這樣我們便可以實現複雜的設定檔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.