.jpg)
书: https://pan.baidu.com/s/1o53U8DJYBlzPKes4X47C8Q?pwd=ymj8
笔记如下:
- “Lua 是一门‘胶水语言’,设计目标是嵌入应用程序中,为宿主环境提供灵活的扩展能力。”
- “Lua 的八种基本类型:
nil、boolean、number、string、userdata、function、thread和table。” - “
table是 Lua 唯一的复合数据结构,既是数组又是字典,索引从 1 开始。” - “元表(Metatable)允许重定义
table的行为,如__index实现继承,__add重载运算符。” - “
pairs()遍历table的所有键值对,ipairs()仅遍历连续整数索引的数组部分。” - “Lua 的字符串是不可变(immutable)的,修改操作实际生成新字符串。”
- “函数是一等公民(First-Class Value),支持闭包(Closure)和匿名函数(
function() end)。” - “
...表示可变参数(Varargs),select('#', ...)获取参数个数,select(n, ...)获取第 n 个参数。” - “协程(Coroutine)通过
coroutine.create创建,coroutine.resume唤醒,实现协作式多任务。” - “
require加载模块时,会检查package.path(Lua 文件)和package.cpath(C 库)路径。” - “
_G是全局变量表,setmetatable(_G, {__index = _G})可防止访问不存在的全局变量时报错。” - “
debug.setmetatable和debug.getmetatable可绕过元表保护机制,慎用。” - “Lua 的
and/or是短路求值,a and b or c可模拟三元运算符。” - “
__gc元方法实现垃圾回收时的资源释放,适用于userdata管理外部资源(如文件句柄)。” - “LuaJIT 通过 FFI(Foreign Function Interface)直接调用 C 函数,性能接近原生代码。”
- “
string.gsub的替换函数支持动态生成内容,string.match捕获组用()标记。” - “
loadfile加载代码文件但不执行,dofile立即执行,loadstring从字符串加载代码块。” - “
setfenv和getfenv(Lua 5.1)控制函数环境,5.2+ 改用_ENV语法糖。” - “尾调用(Tail Call)优化使递归函数不会栈溢出,如
return func(args)形式。” - “Lua 的设计哲学:‘机制而非策略’(Provide mechanisms, not policies),保持核心精简,通过元编程扩展功能。”