Serialization 尝试使用serpent库反序列化lua中的表
因此,我尝试对lua表进行简单的序列化,并将其反序列化回表中。但由于某种原因,它只是失败了Serialization 尝试使用serpent库反序列化lua中的表,serialization,lua,deserialization,Serialization,Lua,Deserialization,因此,我尝试对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)
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
运行后,将显示日志(err)
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块,它将返回序列化的表
请注意以下章节:
请注意,行函数和块函数返回漂亮的打印数据
结构,如果要反序列化它们,则需要添加return
在通过loadstring运行它们之前。例如:
loadstring('return'…require('mobdebug')。行(“foo”)()==“foo”
而您可以使用loadstring或load函数来加载序列化的
片段,蛇还提供了加载功能,增加了安全检查
如果片段中有任何可执行代码,则报告错误
请阅读手册。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块,它将返回序列化的表
请注意以下章节:
请注意,行函数和块函数返回漂亮的打印数据
结构,如果要反序列化它们,则需要添加return
在通过loadstring运行它们之前。例如:
loadstring('return'…require('mobdebug')。行(“foo”)()==“foo”
而您可以使用loadstring或load函数来加载序列化的
片段,蛇还提供了加载功能,增加了安全检查
如果片段中有任何可执行代码,则报告错误
请阅读手册。将
loadstring(line)
替换为loadstring(“return”.line)(
似乎有一个特殊的函数serpent.load
用于反序列化将loadstring(line)
替换为loadstring(“return”.line)()
似乎有一个用于反序列化的特殊函数serpent.load