2016-04-27 2 views
3

Я решил использовать lua в качестве моего управления конфигурацией для своих программ после просмотра сообщений, таких как this и любящего синтаксис, и sol2 недавно был выпущен, поэтому я использую что.Как написать файл с таблицей lua, используя sol2

Итак, мой вопрос: как я могу захватить все переменные в состоянии lua и выплюнуть их в файле?

говорят,

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

, в свою очередь, в конечном итоге выплюнуть

foo = { 
    bar = 2 
    foobar = {} 
} 

Является ли это вообще возможно, и если да, то как?

+0

'Foo = {бар = 2, Foobar = {}}' обратите внимание на запятую. – user6245072

+0

Вам нужен сериализатор таблицы. Есть много сценариев, которые делают это в Wiki Lua 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()); 
} 
Смежные вопросы