LUA 使用命名常量访问索引表
2021-11-3 8:0:45
收藏:0
阅读:144
评论:1
在一个资源有限的 µC 项目中,我使用 LUA 作为嵌入式语言。为了节省一些循环和内存,我总是只使用基于索引的表访问 (table[1]) 而不是基于哈希的访问 (table.someMeaning = 1)。这样可以节省大量的内存。
这种方法的明显缺点是整个代码中的魔术数字。
类似于 Cpp 的预处理器会帮助读者替换数字为命名常量。
有什么好的方式实现这个功能吗? LUA 本身的预处理器,加载脚本并编辑块,然后再加载脚本,也是一种方法,但我觉得这首先会消耗资源 ...
原文链接 https://stackoverflow.com/questions/69821398
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
所以,我找到了一个简单的解决方案:用
Lua
编写自己的预处理器!这可能是最容易的事情。首先,全局定义你的符号:
MySymbols = { FIELD_1 = 1, FIELD_2 = 2, FIELD_3 = 3, }
然后编写你的
preprocessing
函数,它基本上只是用它们的值替换MySymbols
中的字符串。function Preprocess (FilenameIn, FilenameOut) local FileIn = io.open(FilenameIn, "r") local FileString = FileIn:read("*a") for Name, Value in pairs(MySymbols) do FileString = FileString:gsub(Name, Value) end FileIn:close() local FileOut = io.open(FilenameOut, "w") FileOut:write(FileString) FileOut:close() end
然后,如果你使用这个输入文件
test.txt
:TEST FIELD_1 TEST FIELD_2 TEST FIELD_3
并调用以下函数:
Preprocess("test.txt", "test-out.lua")
你将得到一个奇妙的输出文件:
TEST 1 TEST 2 TEST 3
我让你自己去享受将其与你的脚本/工具链集成的乐趣。
如果你想避免手动分配数字,你可以添加一个奇妙的闭包:
function MakeCounter () local Count = 0 return function () Count = Count + 1 return Count end end NewField = MakeCounter() MySymbols = { FIELD_1 = NewField(), FIELD_2 = NewField(), FIELD_3 = NewField() }