Lua程序设计(第4版)(罗伯拖·鲁萨利姆斯奇)

书: https://pan.baidu.com/s/1o53U8DJYBlzPKes4X47C8Q?pwd=ymj8
笔记如下:

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注