.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),保持核心精简,通过元编程扩展功能。”