|
Here's an idea... It's a bit lame, but I'm wondering if it could work.
Looking at lua_dump(), it will barf unless it's given a Lua function on the stack. So... What if I called lua_load on a file that contained "return {}", which just returns an empty table. Then, I might be able to replace the table value returned by this function with the table I want to serialize out. That might require some Lua hacking. I'm starting to lean now more towards writing a simple function that traverses a given table and simply writes out the Lua code that I want. On second thought, it might not be that hard or take that long to do. From: spencerparkin@outlook.com To: lua-l@lists.lua.org Date: Mon, 8 Apr 2013 12:40:21 -0600 Subject: lua_dump/lua_load Hi all, I'm trying to understand Lua's ability to serialize and unserialize a table to a file. I've started with a Lua file that simply returns a table. I can load this file as an executable function on the stack, then execute this function to get the table on the stack. Now here's the question: If I later create a table on the stack, can I somehow, using the C API, create a Lua function that returns this table, and then call lua_dump to serialize the table back out to a file? I'm having trouble figuring out how to create the function. I'm tempted to create a C-function and push that onto the stack, but I somehow doubt that that's going to work. When that C-function is dumped out, I'm not sure what Lua will produce. At best, I think it would produce an identity function -- one that just returns its given argument. The C-function doesn't really know anything about the table I'm trying to dump out. Anyhow, I believe that there has to be a way to do this without doing what I believe would be ridiculous, which would be to write some code that traverses a given table and simply writes out the Lua code. That would work, but it would be dumb to do if Lua could have already done this for me, had I simply known how to create the function on the stack that returns the table, and it's a lot of work, and it's work that breaks when/if Lua changes. Call me picky, but I also don't want to go download and incorporate a table serializer that someone else has already written. I'm trying to own all my code, except for Lua, of course. Am I making any sense here? It seems like if I've got the Lua table on the stack, then I'm just a short distance away from being able to somehow call lua_dump to write it out to a file. I'm just not sure how to create the Lua function. Also, does lua_dump somehow support the "mode" feature that lua_load does? Can lua_dump write out human readable Lua code, or is it alway going to be binary? Thanks, --Spencer |