前言:
--> 表示一条语句的输出或表达式求值的结果
-- 单行注释
> 标注 一些代码需要在交互模式下输入
= 如果需要打印表达式求值的结果,必须在每个表达式前加上一个等号
<--> 表示两者完全等价
语言基础
我们将Lua语言执行的每一段代码(例如,一个文件或交互模式下的一行)称为一个程序段(Chunk),即一组命令或表达式组成的序列。
Lua语言中的标识符(或名称)是由任意字母[插图]、数字和下画线组成的字符串(注意,不能以数字开头)
“下画线+大写字母”(例如_VERSION)组成的标识符通常被Lua语言用作特殊用途,应避免将其用作其他用途
Lua语言对大小写敏感
在注释一段代码时,一个常见的技巧是将这些代码放入--[[和--]]之间
当我们需要重新启用这段代码时,只需在第一行行首添加一个连字符即可:
Lua中 分号是可选的,连续语句之间的分隔符并不是必须的,如果需要的话可以用分号来进行分隔,表达式之间的换行不起任何作用,一下4个程序段都是合法且等价的
全局变量
Lua中的变量默认都是全局变量,即使是函数体中声明的
使用未经初始化的全局变量也不会导致错误,当使用未经初始化的全局变量时得到的结果是nil
(类似于null的东西
当把nil赋值给全局变量时,Lua会回收该全局变量(就像该全局变量从来没有出现过一样)
Lua语言不区分未初始化变量和被赋值为nil的变量,当一个变量被赋值为nil时Lua语言最终会收回该变量占用的内存
类型的值
Lua语言是一种动态类型语言(Dynamically-typed language),在这种语言中没有类型定义(type definition),每个值都带有其自身的类型信息。
Lua语言中有8种基本类型:nil(空)、boolean(布尔)、number(数值)、string(字符串)、userdata(用户数据)、function(函数)、thread(线程)和table(表)。使用函数type可获取一个值对应的类型名称
userdata类型允许把任意的C语言数据保存在Lua语言变量中。在Lua语言中,用户数据类型除了赋值和相等性测试外,没有其他预定义的操作
变量没有预定义的类型,任何变量都可以包含任何类型的值
nil
nil是一种只有一个nil值的类型,它的主要作用就是与其他所有值进行区分。Lua语言使用nil来表示无效值(non-value,即没有有用的值)的情况。像我们之前所学习到的,一个全局变量在第一次被赋值前的默认值就是nil,而将nil赋值给全局变量则相当于将其删除。
Boolean
Boolean类型具有两个值,true和false,它们分别代表了传统布尔值。不过,在Lua语言中,Boolean值并非是用于条件测试的唯一方式,任何值都可以表示条件。在Lua语言中,条件测试(例如控制结构中的分支语句)将除Boolean值false和nil外的所有其他值视为真。特别的是,在条件检测中Lua语言把零和空字符串也都视为真。
and,or,not
逻辑运算符and的运算结果为:如果它的第一个操作数为“false”,则返回第一个操作数,否则返回第二个操作数。
逻辑运算符or的运算结果为:如果它的第一个操作数不为“false”,则返回第一个操作数,否则返回第二个操作数
and 和 or 都遵循短路求值原则
and 的运算符优先级 高于 or
not 还是取反符号,永远返回Boolean类型的值
独立解释器