在特定的作用域中执行加载的 Lua 文件
2016-10-27 0:52:25
收藏:0
阅读:82
评论:1
我正在使用 Lua 作为我的一个项目的配置格式。让我们假设我有以下的一个例子,我们将称之为 conf.lua:
title = "Lorem Ipsum"
author = "John Doe"
date = "01 January 2000"
现在,不言而喻,我当然可以这样加载文件:
dofile("conf.lua")
但是,这个问题就是这些定义是在全局命名空间中设置的,我不想要这样做。此外,它使得访问不同的变量变得很困难(例如循环遍历一组配置变量)。一个解决方法是将 conf.lua 重写为:
local conf = {
title = "Lorem Ipsum",
author = "John Doe",
date = "01 January 2000"
}
return conf
然后用以下代码来加载 conf.lua:
local configuration = dofile("conf.lua")
然而,出于我认为的显而易见的原因,这并不理想。它要求我的用户跟踪逗号,必须写 local,必须记得在最后返回表。有一些方法可以在某种程度上使 conf.lua 在自定义作用域下执行。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 代码?

相比使用
dofile,建议使用loadfile。loadfile允许你指定加载的代码块将在哪个 环境 中执行。将其设置为一个空表可以在该表中放置 _上值_。local function load_conf () local env = {} local chunk, err = loadfile('conf.lua', 'bt', env) if not err then chunk() end return env, err endlocal conf, conf_err = load_conf() print(conf_err) print(conf.title, conf.author, conf.date)loadfile使用类似于load的规则,但它从文件或stdin中加载代码块,而不是从字符串或字符串构建函数中加载。请注意,为了向后兼容 Lua 5.1,需要使用
setfenv。在执行加载的代码块之前,可以使用以下代码(或类似代码)。if setfenv then setfenv(chunk, env) end请参见 《Lua 5.2 参考手册》 的 §8.1 – 语言变更。
最后,建议在 保护模式 中运行代码块,使用
pcall,以免配置文件导致主程序崩溃。