<Lua程序设计>读书笔记

康复训练。

3 数值

  • 从Lua5.3版本开始,Lua语言为数值格式提供了两种选择:64位整型的Integer和双精度浮点类型的float。

3.2 算术运算

  • 当操作数一个整型值,一个是浮点型值时,Lua会在进行算数运算前先将整型值转换成浮点型值。
  • 为了避免两个整型值相除和两个浮点型值相除导致不一样的结果,除法运算操作的永远是浮点数且产生浮点型值的结果。
  • Lua5.3针对整数除法引入了一个称为floor除法的新算数运算符//。floor除法会对得到的商向负无穷取整,从而保证结果是一个整数。
  • 对于任意指定的正常量K,即使x是负数,表达式x%K的结果也永远在[0, k-1]之间。
  • 对于实数类型的操作数而言,取模运算有一些不同,例如,x-x%0.01恰好是x保留两位小数的结果,x-x%0.001恰好是x保留三位小数的结果。

3.4 数学库

  • floor向负无穷取整,ceil向正无穷取整,modf向零取整。

3.6 惯例

  • 通过与零进行按位或运算,可以把浮点型值强制转换为整型值。
  • 可以使用函数math.tointeger把数值强制转换为整型值,在输入参数无法转换为整型值时返回nil。

4 字符串

4.1 字符串常量

  • 从Lua5.3开始,也可以使用转义序列\u{h…h}来声明UTF-8字符,花括号里可以支持任意有效的十六进制。

4.3 强制类型转换

  • 当在数值后紧接着使用字符串连接时,必须使用空格将它们分开,否则Lua语言会把第一个点当成小数点。
  • 默认情况下,函数tonumber使用的是十进制,但是也可以指明使用二进制到三十六进制之间的任意进制。

5 表

  • 表永远是匿名的,表本身和保存表的变量之间没有固定的关系。

5.1 表索引

  • 如同全局变量一样,未经初始化的表元素为nil,将nil赋值给表元素可以将其删除。
  • 实际上,a.x代表的是a[“x”],即由字符串“x”索引的表,而a[x]则是指由变量x对应的值索引的表。
  • 被用作表索引是,任何能够被转换成整型的浮点数都会被转换成整型数。

5.2 表构造器

a = {x = 10, y = 20}等价于a = {}; a.x = 10; a.y = 20,在第一种写法中,由于能够提前判断表的大小,所以运行速度更快。

6 函数

6.1 多返回值

  • 在多重赋值中,如果一个函数调用是一系列表达式中的最后(或者是唯一)一个表达式,则该函数调用将产生尽可能多的返回值以匹配待赋值变量。
  • 当一个函数调用是另一个函数调用的最后一个(或者是唯一)实参时,第一个函数的所有返回值都会作为实参传给第二个函数。
  • 调用f(g())时,如果f的参数是固定的,那么Lua语言会把g返回值的个数调整为与f的参数个数一致。
  • 表构造器会完整的接收函数调用的所有返回值,而不会调整返回值的个数。