Lua程序设计(0)

Lua程序设计的第一篇,主要内容是基本语法以及运算符。

交互模式:

在交互模式下,Lua语言解释器如果发现我们输入的某一行不完整,会等待知道程序块或表达式被输入完整后再进行解释执行。

  • 我们可以使用-i参数让Lua语言解释器在执行完制定的程序段之后进入交互模式。

    % lua -i prog

    在执行完文件prog中的程序段之后进入交互模式。

  • 另一种运行程序段的方式:dofile

    我们可以同时打开两个窗口,一个窗口中使用文件编辑器编辑的代码,另一个窗口中使用交互模式运行lua语言解释器,当修改完代码并保存时,只要在Lua语言交互模式的提示符下执行dofile就可以加载新代码,然后就可以观察新代码的函数调用与执行结果了。

词法规范:

  • 标识符是由任意字母,数字和下划线组成的字符串
  • 下划线+大写字母的标识符通常用作特殊用途
  • 可以将下划线+小写字母用作“哑变量”
  • Lua 语言对大小写敏感
  • 单行注释:两个连续的连字符(- -);多行注释:两个连续的连字符加两对连续左方括号表示长注释或多行注释的开始,直到两个连续的右括号为止,需要重新启用代码时,在第一行行首添加一个连字符即可。
  • 可以用分号对语句进行分隔,但一般不使用

全局变量:

  • 全局变量无需声明便可使用,若使用未经初始化的全局变量,其结果为nil
  • 当把nil赋值给全局变量时,Lua会回收该全局变量
  • Lua不区分未初始化变量和被赋值为nil的变量,当赋值语句执行后,Lua语言会最终回收该变量占用的内存

类型和值:

  • Lua语言是一种动态类型语言,在这种语言中, 没有类型定义,每个值都有其自身的类型信息。

  • Lua中有八种基本类型:

    • nil
    • boolean
    • number
    • string
    • userdata
    • function
    • thread
    • table
  • 使用函数type可获取一个值的对应类型名称,以字符串形式表示。

  • 变量没有预定义的类型,任何变量都可以包含任何类型的值。

nil:

只有一个nil值的类型,用于与其他所有值进行区分,来表示无效值。

boolean:

拥有true与false两个值。

  • 条件测试将除false与nil外的所有值视为真。

  • 逻辑运算符:and、or和not

    • and:如果它的第一个操作数为false,则返回第一个操作数,否则返回第二个操作数
    • or:如果第一个操作数不为false,则返回第一个操作数,否则返回第二个操作数
    • not:永远返回Boolean类型的值
  • 两种便捷写法:

    1
    2
    3
    4
    5
    6
    x=x or v -- 等价于
    if not x then x = v end -- 当x未被初始化时,将其默认值设置为v

    --

    ((a and b)or c) -- 当b不为false时,等价于三目运算符:a?b:c

数值

从Lua5.3版本开始,Lua为数值类型提供了两种选择:

  • integer:64位整型
  • float:双精度浮点类型

数值常量:

  • 可以使用科学计数法来表示数值常量
  • 具有十进制小数或者指数的值的数值会被当作浮点型,其余的为整型
  • 整型与浮点型的值的类型都为number,相同算术值的不同整型值与浮点型值是相等的
  • 可使用math.type函数具体区分整型值与浮点型值
  • 可用0x开头表示十六进制常量,也支持十六进制的浮点数,由小数部分和以p或P开头的指数部分组成,其转换规则大抵如下:
    • 十六进制:0xa.bp2,将其拆解为二进制为1010.1011*10^2,即为101010.11,十进制下为42.75
  • 可以使用%a参数与string.format函数对上述格式进行格式化输出:
    • string.format(“%a”,419) –> 0x1.a3p+8

算术运算:

  • 支持加、减、乘、除、floor(//)、取模(%)、指数运算(^)

  • 除法运算操作的永远是浮点数且产生浮点数的结果

  • floor除法:对得到的商向负无穷取整,以确保结果是一个整数
  • 幂运算的操作数也永远是浮点类型

关系运算:

  • 支持小于、大于、小于等于、大于等于、等于(==)、不等于(~=)

数学库:

随机数发生器:

math.random用于生成伪随机数,当不带参数调用时,该函数返回一个在[0,1)范围内均匀分布的伪随机实数;当使用整型n作为参数时,返回一个在[1,n]范围内的伪随机整数,使用两个整型值l和u时,返回[l,u]范围内的伪随机整数。

可以用函数randomseed来设置伪随机数发生器的种子,以使加强其随机性。

取整函数:
  • floor函数:向负无穷取整
  • ceil函数:向正无穷取整
  • modf函数:向零取整,返回取整后的值以及小数部分作为第二个结果。

表示范围:

标准Lua使用64个比特位来存储整型值,其最大值为2^63 - 1;精简Lua使用32个比特位存储整型值。

当对整形操作时出现比mininteger更小或者maxinteger更大的数值时,结果就会回环。在计算机领域,回环的意思就是丢弃最高进位。

对于浮点数而言,标准Lua使用双精度。

运算符优先级:

详见:https://www.runoob.com/lua/lua-miscellaneous-operator.html