因此,我尝试对lua表进行简单的序列化,并将其反序列化回表。但出于某种原因,它只是失败了。
local a = {}
a[0] = {name="presetA"}
local line = serpent.line(a)
local presets, err = loadstring(line)
if (err) then
log("Error")
log(err)
else
log("Success")
log(serpent.block(presets))
end运行后,log(err)显示
[string "{[0] = {name = "presetA"}}"]:1: unexpected symbol near '{'发布于 2017-11-14 17:13:33
loadstring从给定的字符串加载Lua块并运行它。
由于序列化的表不是有效的Lua表达式,所以解释器报告观察到的错误。
让我们序列化一个示例:
serpent.line({key = "value"})返回
{key= "value"} -[表:0D80CF40]
表构造函数本身并不是有效的Lua表达式。
试着运行这一行,Lua就会报告:
输入:1:“{”附近的意外符号
serpent.line的输出不能用作loadstring的输入。
现在,如果您使用serpent.dump代替
"do local _={name="hallo"};return _;end"这是一个有效的可执行Lua块,它将返回序列化的表。
请注意蛇形文献中的以下部分
注意到,行函数和块函数返回打印得很好的数据结构,如果要反序列化它们,则需要在通过loadstring. (例如:
loadstring('return '..require('mobdebug').line("foo"))() == "foo")运行它们之前添加返回。 虽然可以使用加载字符串或加载函数来加载序列化的片段,但Serpent还提供了load函数,如果片段中有任何可执行代码,则可以添加安全检查并报告错误。
请阅读手册。
https://stackoverflow.com/questions/47290405
复制相似问题