lua学习

lua中文手册地址  http://www.runoob.com/manual/lua53doc/manual.html

pcall和xpcall

pcall (f [, arg1, ···])

传入参数,以 保护模式 调用函数 f 。 这意味着 f 中的任何错误不会抛出; 取而代之的是,pcall 会将错误捕获到,并返回一个状态码。 第一个返回值是状态码(一个布尔量), 当没有错误时,其为真。 此时,pcall 同样会在状态码后返回所有调用的结果。 在有错误时,pcall 返回 false 加错误消息。

xpcall (f, msgh [, arg1, ···])

这个函数和 pcall 类似。 不过它可以额外设置一个消息处理器 msgh。

垃圾回收

Lua 实现了一个增量标记-扫描收集器。 它使用这两个数字来控制垃圾收集循环: 垃圾收集器间歇率 和 垃圾收集器步进倍率。 这两个数字都使用百分数为单位 (例如:值 100 在内部表示 1 )。

你可以通过在 C 中调用 lua_gc 或在 Lua 中调用 collectgarbage 来改变这俩数字。 这两个函数也可以用来直接控制收集器(例如停止它或重启它)。

弱表

一张表的元表中的 __mode域控制着这张表的弱属性。  当 __mode 域是一个包含字符 'k' 的字符串时,这张表的所有键皆为弱引用。 当 __mode 域是一个包含字符 'v' 的字符串时,这张表的所有值皆为弱引用。

协程

Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行

调用函数 coroutine.create 可创建一个协程。 其唯一的参数是该协程的主函数。 create 函数只负责新建一个协程并返回其句柄 (一个 thread 类型的对象); 而不会启动该协程。

通过调用 coroutine.yield 使协程暂停执行,让出执行权

参考文档 https://www.cnblogs.com/zrtqsk/p/4374360.html

匹配模式

Lua 中的匹配模式直接用常规的字符串来描述。 它用于模式匹配函数 string.findstring.gmatchstring.gsubstring.match。 这一节表述了这些字符串的语法及含义(即它能匹配到什么)。

字符类:

字符类 用于表示一个字符集合。 下列组合可用于字符类:

  • x(这里 x 不能是 魔法字符 ^$()%.[]*+-? 中的一员) 表示字符 x 自身。
  • .(一个点)可表示任何字符。
  • %a表示任何字母。
  • %c表示任何控制字符。
  • %d表示任何数字。
  • %g表示任何除空白符外的可打印字符。
  • %l表示所有小写字母。
  • %p表示所有标点符号。
  • %s表示所有空白字符。
  • %u表示所有大写字母。
  • %w表示所有字母及数字。
  • %x表示所有 16 进制数字符号。
  • %x(这里的 x 是任意非字母或数字的字符) 表示字符 x。 这是对魔法字符转义的标准方法。 所有非字母或数字的字符 (包括所有标点,也包括非魔法字符) 都可以用前置一个 '%' 放在模式串中表示自身。
  • [set]表示 set 中所有字符的联合。 可以以 '-' 连接,升序书写范围两端的字符来表示一个范围的字符集。 上面提到的 %x 形式也可以在 set 中使用 表示其中的一个元素。 其它出现在 set 中的字符则代表它们自己。 例如,[%w_] (或 [_%w]) 表示所有的字母数字加下划线), [0-7] 表示 8 进制数字, [0-7%l%-] 表示 8 进制数字加小写字母与 '-' 字符。

    交叉使用类和范围的行为未定义。 因此,像 [%a-z] 或 [a-%%] 这样的模式串没有意义。

  • [^set]表示 set 的补集, 其中 set 如上面的解释。

所有单个字母表示的类别(%a%c,等), 若将其字母改为大写,均表示对应的补集。 例如,%S 表示所有非空格的字符。

如何定义字母、空格、或是其他字符组取决于当前的区域设置。 特别注意:[a-z] 未必等价于 %l 。

原文地址:https://www.cnblogs.com/orxx/p/9439800.html