Lua入门记录

学习资料

阅读笔记,只是记录了知识点和一些注意点,详细的可以看上面提供的学习资料链接

  • 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
  • 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)

猜你喜欢

转载自www.cnblogs.com/phonecom/p/10995614.html