Lua 学习整理

Lua学习整理

词法(自舒适方式)

  1. 同行以分号分隔,跨行无分隔符

    语法

  2. 全局变量无需声明,未初始化的使用值为nil
    
  3. nil赋值给全局变量 会删除该变量

  4. 数据结构

  5. 8个基本类型:

  6. Nil:唯一值nil。主要特性是与其他值不同。
    
  7. boolean:false true  条件测试时 false和nil是false ,其他都为true。
    
  8. number:real
    
  9. string:8位存储。Lua字符串是固定值,无法在字符串内做修改。字符串遵循自动内存管理。向所有其他内存对象.#字符串长度操作符。  
    字面字符串声明,可以采用单引号或双引号,无差别,二者嵌套时不用转义字符。
    转移序列:\a \b \f \n \r \t \v \\ \" \'  \z
    长字符串:[[   第一个换行会被忽略,转移字符不会被解释。[=[ 中间可多个=。长字符串是代码中包含literal text的理想方式,不要用他包含非文本字符串。尽管字面字符串可以包含任意字符,但不建议这样使用,you
    

    may have problems with your text editor; moreover, end-of-line sequences like
    “❭r❭♥” may change to “❭♥” when read. Instead, it is better to code arbitrary binary data using numeric escape sequences, either in decimal or in hexadecimal,

  10. userdata:允许任意的C数据存储在Lua变量中。无预定义的操作。
    
  11. function:第一类对象,可以存储在变量里,或将函数作为参数或返回值。lua可以调用c语言编写的函数。所有的lua标准库都是用c编写的。

  12. thread:
    
  13. tables:关联数组。可以使用数字,字符串和除了nil外语言的任意其他值。tables是浅引用。a.x 与a[x]区别。x是变量,[x]x是字符串。 声明 a={} 索引最好从1开始。字符串 数字等作为索引是不同的。
    表的创建 a={b=“df”,[“c”]=“asdf”}

控制逻辑

  1. if then end (if then else end) (if then elif then end)
  2. while do end (repeat until end)
  3. for do end
  4. break return

    操作符

    lua的 or操作 ,如果第一部分为真直接返回该值,假返回or后面的值。值的类型是表达式的结果类型。

    对象机制

    标准库

    数学库

字符串

  1. lua解释器只提供了简单的创建联结取长度等功能。string库提供更强大的字符串操作功能。
  2. 创建:string.len(s) 返回s的长度,不包含结束标志。等同于#s
  3. string.rep() 重复多次级联
  4. string.lower 字符串转换成小写
  5. string1 > string2 逐个比较两个字符串中的每个字符,字母表排序,得出true或false
  6. string.sub(s,i,j)i从1开始计数。[i,j] 小于等于j,不改变字符串,返回一个新的字符串。
  7. string.char string.byte 在字符和数字表示间进行转换,string.char函数返回所有字符串的数字表示序列,.byte函数返回字符串s的第一个字符的数字表示。string.byte(s,i,j)返回多个。
  8. string.format() 格式化方式与c相同
  9. string.match()函数返回匹配到的字符串
  10. string.gsub()函数 匹配并替换掉匹配的字符串,可以提供替换的次数,第二个返回值是替换的次数
  11. string.gmatch()返回匹配结果的迭代函数。

模块和包

require 一个模块会返回一个table。独立的解释器会预加载所有标准库。
模块加载时包含选项问题:
1.初始化函数返回模块

  1. 模块返回初始化函数,只有初始化函数返回模块。

require加载过程:
1.检查表package.loaded表存储的已经加载的模块。有,直接返回
2.没有,查找lua file,用loadfile 加载该模块。

  1. 如果没有该文件,查找c库包含该模块名。找到c库,使用package.loadlib加载它。

require查找package.path 该变量存储以;分隔的模板,模板使用?代表任意字符组合。package.path在lua启动时,使用环境变量LUA_PATH_5.2初始化。如果该环境变量不存在,使用LUA_PATH。都没有使用编译预定义的路径。
c库存储在package.cpath.

函数package.searchpath编码了所有查找库的规则。

模块是第一类的。

Lua 模块编写

1。 若果模块不返回值,return会返回package.loaded[modname]如果他不空。

  1. 创建一个table,放入所有函数在里面,返回这个table。

  2. 可以不用return module,采用package.loaded[] 赋值的方式。

  3. 另一个方式是采用定义所有的函数为locals,在最后构建返回的table。

  4. 无论module如何定义,必须采用标准方式使用它。

  5. ==注释==
    –[=[ ]=] :=个数随意,要收尾对应。

协程

  1. 协程拥有自己的stack,局部变量,自己的指令指针,但是与其他协程共享全局变量和几乎任何其他东西。
    协程不同于线程的地方是协程不是并行执行,而是协同运行。在指定时间程序调用他指定的一个协程,
  2. 协程四种状态:suspended running dead normal
  3. coroutine.yield 允许一个协程从running状态转换成suspended 状态。
  4. coroutine.resume 运行在保护模式,所有错误会返回给resume调用。

==note==
Lua提供运行时字符串和数字的自动转化功能,最好不要使用它们。

你可能感兴趣的:(Lua 学习整理)