首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码。Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者多条语句并列时最好使用分隔符进行分隔,如以下的四种都是合法的。
x = 1; y = 2
x = 1 y = 2
x = 1;
y = 2;
x = 1
y = 2
一、标识符规范
Lua中的标识符可以是由任意字母、数字、下划线组成的字符串,但不能以数字开头。还有,应避免使用以一个下划线并跟着一个或多个大写字母的标识符,因为Lua将这类标识符保留用作特殊的用途。例如“_VERSION”。
当然Lua中有一些不能作为标识符的保留字:
and、break、do、else、elseif、end、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until、while
Lua对大小写是敏感的。“false”与“faLse”、“False”都是不同的标识符、false是一个保留字。
Lua中的注释符,行注释以“--”为开始字符的一行一直到行尾都属于注释部分,还有一种块注释以“--[[”开始至“]]”结束,如:
Lua中的全局变量不需要声明,只需将一个值赋予一个全局变量即可创建,如上例的“x=1”这里的x就是全局变量,局部变量的声明是前面加保留字local
如:local x=1。Lua中的值在未初始化时默认为nil,引用一个未初始化的变量不会引发报错。
同样的,未初始化的变量为nil值,那么要删除一个已初始化的变量,只需要把它的值重新设为nil即可。
二、类型
Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都“携带”了它自身的类型信息。在Lua中有8种基础的类型:
nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)、table(表)
Lua中变量没有预定义类型,任何变量都包含任何类型的值:
三、值
nil是一种类型,它只有一个值nil,主要用于区别其他的任何值。Lua将nil表示为“无效值”。
boolean类型只有两个可选值true和false。Lua将false和nil视为“假”,将其他任何值视为“真”。
number类型用于表示实数。Lua中没有整数类型,因此Lua中的数字可以表示任何32位整数,而不会产生四舍五入的错误。
string类型用于表示一个字符序列。Lua完全采用8为编码,Lua字符串中的字符可以具有任何数值编码,包括数值0。可以将任意二进制数据存储到一个字符串中。Lua的字符串是不可改变的值。如果要修改字符,就会根据修改要求来创建新的字符串。
Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操作时,Lua会尝试将这个字符串转换成一个数字:
Lua不仅在算术操作中会以做这种强制转换,还会在其他任何需要数字的地方这么做。然而在Lua中也会把数字转换成为字符串使用“..”符号
字符串与数字是不同的类型,因此 50 == ”50“ 是为false的,还可以使用tonumber、tostring函数进行数字与字符串的转换,然而tonumber转换时如果字符串中不能转换为正确的数字时,tonumber将返回nil。tostring可以转换任何数字与字符串。
如何获取字符串的长度:使用"#"长度操作符,在字符串前面加上#就可以获得长度。如:
table是Lua中主要的数据结构机制,具有强大的功能。基于table可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。Lua也是通过table来表示模块、包和对象的。table实现了”关联数组“,是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或其他非nil值类索引它。而且table是没有固定大小的,可以通过表元素来进行动态扩容。
table在Lua中既不是”值“也不是”变量“,而是”对象“。可以将table想象为一种动态分配的对象,程序仅保存持有对他们的引用(可以理解为指针),Lua不会暗中产生table的副本或创建新的table,也不需要声明一个table。table是通过”构造表达式“完成的,最简单的构造表达式就是"{}"。
table永远是”匿名的“,一个持有table的变量与table自身之间是没有固定关联性的。当程序没有对一个table进行引用时,Lua的垃圾收集器最终会删除该table,并复用它的内存。