2016-04-27 39 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()); 
}