2016-04-27 72 views
3

我在使用lua作爲我的程序配置管理後,在看到類似this的文章並熱愛語法,並且最近發佈了sol2,因此我正在使用那。如何使用sol2編寫包含lua表的文件

所以我的問題是,我如何獲取我的lua狀態中的所有變量並將它們吐出文件?

說,

sol::state lua; 
lua["foo"]["bar"] = 2; 
lua["foo"]["foobar"] = lua.create_table(); 

將反過來,最終吐出

foo = { 
    bar = 2 
    foobar = {} 
} 

這是在所有可能的,如果是這樣,如何?

+0

'富= {巴= 2,foobar的= {}}'注意逗號。 – user6245072

+0

你需要一個表序列化器。有許多腳本可以在Lua的Wiki http://lua-users.org/wiki/TableSerialization中執行此操作 –

回答

0

我用this serializer序列化我的表並打印出來,真的很容易!

這是我想出了

std::string save_table(const std::string& table_name, sol::state& lua) 
{ 
    auto table = lua["serpent"]; 
    if (!table.valid()) { 
     throw std::runtime_error("Serpent not loaded!"); 
    } 
    if (!lua[table_name].valid()) { 
     throw std::runtime_error(table_name + " doesn't exist!"); 
    } 
    std::stringstream out; 
    out << table_name << " = "; 
    sol::function block = table["block"]; 
    std::string cont = block(lua[table_name]); 
    out << cont; 
    return std::move(out.str()); 
}