如何使用 sol2 编写包含 lua 表的文件

How can I write a file with containing a lua table using sol2

本文关键字:lua 文件 包含 何使用 sol2      更新时间:2023-10-16

在看到这样的帖子并喜欢它的语法后,我决定使用 lua 作为我的程序的配置管理,sol2 最近发布了,所以我正在使用它。

所以我的问题是,我怎样才能抓取 lua 状态中的所有变量并将它们吐出到文件中?

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

反过来,最终会吐出来

foo = {
    bar = 2
    foobar = {}
}

这是否可能,如果是,如何?

我用这个序列化器来序列化我的表并打印出来,真的很容易!

这就是我想出的

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());
}