将序列化的数据加载到表中
2017-5-23 10:34:32
收藏:0
阅读:88
评论:1
为了回答另一个问题,我想将一些序列化的 lua 代码加载到表中。要加载的字符串如下:
SavedVars = { }
SavedStats = { }
(其中每个 {...}
可以是任何 Lua 表达式,包括具有嵌套数据的表构造函数。我假设它不会调用任何(全局)函数或使用全局变量。)
我最终想要的是这样一个表:
{ ["SavedVar"] = { }, ["SavedStats"] = { } }
我不想在之后拥有全局变量 SavedVars
。如何最优雅地实现?
(我已经找到了一个解决方案,但也许有人有更好的方法。)
原文链接 https://stackoverflow.com/questions/5958818
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
以下是我的解决方案:
-- 将字符串加载到一个表中。 -- 此函数使用一个新表的环境执行该字符串,然后返回该表。 -- -- 字符串中的代码不应该需要任何它没有声明的变量, -- 因为这些变量在运行时不可用。 它在一个非常空的环境中运行。 function loadTable(data) local table = {} local f = assert(loadstring(data)) setfenv(f, table) f() return table end
它使用
loadstring
载入数据字符串,然后使用setfenv
修改函数的全局环境为一个新表。然后调用载入的函数一次来填充这个表(而不是全局环境),最后将该表返回。将环境设置为一个新表的效果是,代码无法使用任何全局数据。我认为这是一种很好的隔离代码的方式,但如果不想要这种隔离,你可以在返回表之前填充该表或提供一些元表(但在返回表之前取消设置)。
这个载入函数也适用于像使用循环保存表中生成的序列化数据。