Lua 编程三十个常见错误:初级、中级、高级,逐个拆解

Posted on 四 22 10月 2026 in Tech • Tagged with tech, lua, 编程, pitfalls, 脚本, nginx, redis

解释性脚本语言的坑大多是共通的——动态类型、隐式转换、宽松的作用域、还有"够用就好"的语法。Lua 以小巧著称,一门语言只有二十来个关键字,却屡屡在游戏脚本、Nginx/OpenResty 配置、Redis 事务、各种嵌入式场景里让人栽跟头。本文把高频翻车整理成三十个常见错误,按初级、中级、高级三层排开,每一条都配了可以自己跑的代码实例。大多数坑不是语法问题,而是 Lua 的"抠门"设计——数组从 1 开始、nil 不算元素、表比较的是引用、连整数除法都是后来才补的——这些设计单独看都合理,凑到一起就成了连环陷阱。


Continue reading

不用碰撞:读懂一段 Lua,O(1) 造出落在指定 Slot 的 Redis Key

Posted on 二 20 10月 2026 in Tech • Tagged with tech, redis, redis-cluster, crc16, algorithm, lua, gf2

把 Redis Cluster 想成一个有 16384 个抽屉的柜子:给数据起个名字,柜子算出它进几号抽屉。我们要反着来——给定抽屉号,倒推一个能落进去的名字。很多人靠瞎试,又慢又碰运气。其实这里的算法说穿了只是异或:每个“开关”对结果的影响固定、还能叠加,于是倒推就成了一道凑开关的小学游戏,一步解出。本文用“抽屉、灯开关、调音台”这些大白话,配四张图,带没学过高数、刚入门编程的人逐段读懂一段真实的 Lua 实现,代码我逐个抽屉验证过。


Continue reading

引擎归 C++,玩法归 Lua:一个打砖块游戏的分层写法

Posted on 五 02 10月 2026 in Tech • Tagged with tech, lua, cpp, sdl, sol2, game, gamedev

想改一下小球的速度,却要等三分钟重新编译整个 C++ 工程——这是自己拿 C++ 写游戏时最劝退的一件事。这篇借一个真实的 SDL 打砖块项目(eliasdaler/sdl_breakout)讲清楚一种分层写法:C++ 只当"引擎",负责窗口、渲染、音频、输入这些慢变的底层;游戏玩法整个搬到 Lua,改了存盘就生效。文章拆解 sol2 怎么把 C++ 的类和函数暴露给 Lua、GC 怎么接管 SDL 资源,最后附上我把它移植到 macOS 时踩的三个坑和改法。代码引用来自该项目 master 分支,移植改动在 macOS + Apple clang 上实测。


Continue reading

让 Lua 插上翅膀:C 与 Lua 是怎么绑在一起的

Posted on 四 01 10月 2026 in Tech • Tagged with tech, lua, c, ffi, swig, freeswitch, openresty, luajit

Lua 自己什么都不会——不会发网络请求,不会读数据库,连打开一个文件都得靠宿主给的库。它小得可怜,却长在魔兽世界、Nginx、Redis、FreeSWITCH 这些庞然大物里,靠的就是一件事:跟 C 无缝对接,借用整个 C/C++ 生态。这篇讲清楚 C 和 Lua 到底是怎么绑在一起的——从那个来回倒数据的栈,到注册 C 函数、包装 C 对象,再落到两种真实风格:FreeSWITCH 用 SWIG 预生成胶水,OpenResty 用 LuaJIT FFI 干脆不写胶水。代码引用来自 FreeSWITCH master 分支与 LuaJIT 官方文档。


Continue reading

用 Lua 写 Dialplan 接 LLM:从零搓一个 AI 智能客服

Posted on 二 29 9月 2026 in Tech • Tagged with tech, freeswitch, lua, unimrcp, mrcp, llm, asr, tts, contact-center, voip

FreeSWITCH + UniMRCP + LLM 的分工和架构有了,落到代码,XML dialplan 表达不了"调 HTTP、维护多轮上下文、按 LLM 结果分支"这种逻辑,得用 Lua。这里有一份能读懂的完整 voice_agent.lua 骨架——从接通、放欢迎语、开麦识别、调 LLM 网关、合成回复,到打断、超时、转人工、挂断的完整对话循环,关键处标清楚哪里要按你的环境改。顺带说清 mod_unimrcp 的 speak / play_and_detect_speech 怎么用,以及为什么 LLM 场景要用自由识别而不是固定语法。


Continue reading

重拾 Lua:从月亮语言到 FreeSWITCH 里的胶水

Posted on 一 14 9月 2026 in Tech • Tagged with tech, lua, freeswitch, scripting, mod_lua, dialplan

十几年前我做过一个《A Glance of Lua》的分享,如今大半忘光了。这篇先用老程序员重拾旧语言的角度,把 Lua 最该记住的那几样东西——表即一切、元表、闭包、协程、C API——快速过一遍;再落到 FreeSWITCH:mod_lua 到底把脚本挂在哪几个位置(dialplan、XML handler、event hook、startup script),配一组能看懂的例子、几条最佳实践和最容易栽的坑。Lua 语法基于 5.x,FreeSWITCH 部分引用官方 scripting 文档。


Continue reading