学习资料
阅读笔记,只是记录了知识点和一些注意点,详细的可以看上面提供的学习资料链接
- Lua 基础数据类型
- nil(空)
- boolean(布尔)
- Lua 中 nil 和 false 为“假”,其它所有值均为“真”
- number(数字)
- string(字符串)
- 使用一对匹配的单引号。例:'hello'。
- 使用一对匹配的双引号。例:"abclua"。
- 字符串还可以用一种长括号(即[[ ]])括起来的方式定义
- Lua 字符串一般都会经历一个“内化”(intern)的过程,即两个完全一样的 Lua 字符串在 Lua 虚拟机中只会存储一份
- table (表)
- 索引可以是除 nil 以外的任意类型的值
- function (函数)
- 有名函数的定义本质上是匿名函数对变量的赋值
- 表达式
- 算术运算符
- 关系运算符
- Lua 语言中“不等于”运算符的写法为:~=
- 只有当两个变量引用同一个对象时,才认为它们相等
- 逻辑运算符
- a and b 如果 a 为 nil,则返回 a,否则返回 b (短路求值)
- a or b 如果 a 为 nil,则返回 b,否则返回 a (短路求值)
- 对于 not,永远只返回 true 或者 false
- 字符串连接
- 连接两个字符串,可以使用操作符".."(两个点)
- 使用 string 库函数 string.format 连接字符串
- 由于 Lua 字符串本质上是只读的,因此字符串连接运算符几乎总会创建一个新的(更大的)字符串
- 使用table.concat() 来进行很多字符串的拼接
- 优先级
- 若不确定某些操作符的优先级,就应显示地用括号来指定运算顺序。这样做还可以提高代码的可读性。
- 控制结构
- if-else
- else 与 if 是连在一起的,若将 else 与 if 写成 "else if" 则相当于在 else 里嵌套另一个 if 语句
- while
- repeat
- 执行 repeat 循环体后,直到 until 的条件为真时才结束
- for
- Lua 标准库提供了几种迭代器,包括用于迭代文件中每行的(io.lines)、 迭代 table 元素的(pairs)、迭代数组元素的(ipairs)、迭代字符串中单词的(string.gmatch)
- 最好使用ipairs,ipairs() 内建函数是可以被 JIT 编译的
- break,return 和 goto
- return 若要写在函数中间,则只能写在一个显式的语句块内 或者 直接写成do return end,否则会报错
- 提供 goto 代替 continue
- if-else
- Lua函数
- 使用local修饰符标记局部函数
- 变长参数使用"..."(三个点),若对性能敏感的代码,应当避免使用此种形式
- 函数的返回值允许函数返回多个值,返回多个值时,值之间用","隔开
- 全动态函数调用
local args = {...} or {} method_name(unpack(args, 1, table.maxn(args)))
- 模块
- require 函数用来加载模块
- require 函数内不能进行上下文切换,所以不能够在模块的顶级上下文中调用 cosocket 一类的 API
- String库
- Lua 字符串内部用来标识各个组成字节的下标是从 1 开始的
- string.byte(s [, i [, j ]])
- string.char (...)
- string.upper(s)
- string.lower(s)
- string.len(s)
- 使用此函数是不推荐的。应当总是使用 # 运算符来获取 Lua 字符串的长度。
- string.find(s, p [, init [, plain]])
- p参数尽量不要使用模式匹配
- string.format(formatstring, ...)
- string.match(s, p [, init])
- 目前并不能被 JIT 编译,应 尽量 使用 ngx_lua 模块提供的 ngx.re.match 等接口
- string.gmatch(s, p)
- 目前并不能被 LuaJIT 所 JIT 编译,而只能被解释执行。应 尽量 使用 ngx_lua 模块提供的 ngx.re.gmatch 等接口。
- string.rep(s, n)
- string.sub(s, i [, j])
- string.gsub(s, p, r [, n])
- 此函数不能为 LuaJIT 所 JIT 编译,而只能被解释执行。一般我们推荐使用 ngx_lua 模块提供的 ngx.re.gsub 函数。
- string.reverse (s)