二、Lua基础语法
2.1 全局变量
1、全局变量不需要声明,默认初始值是nil,给一个变量赋值后就创建了这个全局变量,
如果要删除一个全局变量,只需要将其赋值为nil,Lua是大小写敏感的。
注释: 单行注释 --
多行注释 --[[
2.2 值和类型
Lua是动态类型语言,变量不需要类型定义
Lua中有8个基本类型:
类型:nil :一个全局变量没有被赋值以前默认值为nil,给全局变量赋值nil、可以删除该变量
类型:boolean :Lua中所有的值都可以作为条件。在条件中除了false和nil,其他值都为真,所以0和空串都为真
类型:number :表示实数,整数类型和浮点数类型都属于number
类型:string :
类型:userdata :
类型:function :
类型:thread :
类型:table :
变量没有预定义的类型,每一个变量都可能包含任一种类型的值。
在运行时,Lua会自动转换string和number之间的类型
特殊字符:
.. 字符串连接
显式转换string成number: 函数tonumber() 如果string不是正确的数字则返回nil
显式转换number成string: 函数tostring()
2.3 表达式
二元运算符:+ - * / ^ 加、减、乘、除、幂
一元运算符:- 负数
这些运算符的操作数都是实数
关系运算符:< > <= >= == ~=
小于 大于 小于等于 大于等于 等于 不等于
返回结果为false或true
==和~=比较两个值,如果两个值类型不同,Lua认为两者不同
nil只和自己相等
Lua通过引用比较tables、userdata、functions,当且仅当两者表示同一个对象时相等
Lua比较数字按数字大小,比较字符串按字母顺序,但是字母顺序依赖于本地环境
逻辑运算符:and or not
逻辑运算符认为false和nil是假,其他都为真,0也是真
and 和 or 的运算结果和它的两个操作数相关
a and b 如果a为false,则返回a,否则返回b
a or b 如果a为true,则返回a,否则返回b
and 的优先级比 or 高
C语言中的三元运算符 a?b:c
在Lua中写成:(a and b) or c
算术运算符的优先级如下:
^
not -
* /
+ -
..
< > <= >= == ~=
and
or
注意:lua没有自增运算符和自减运算符
2.4 语句
2.4.1 赋值语句
-----------------------------------------------------------------------------------------
三、Lua table的使用
表table是Lua特有的,最简单的构造函数是{},用来创建一个空的表。可以直接初始化数组:
days = {"Sunday","Monday","Tuesday","Wednesday","thrusday","Friday","Saturday"}
Lua 用 "Sunday" 初始化days[1],因为Lua中的表第一个元素的元素索引为1
用 "Monday" 初始化days[2],
....
table获取元素值可以使用days["key"]来获取,或者索引下标days[i]
a = {x=0,y=0}
等价于
a = {};
a.x=0;
a.y=0;
标准库中提供了几种迭代器,包括
io.lines 迭代文件的每一行
pairs 迭代table的元素,pairs可以遍历表中的所有key,可以返回nil
ipairs 迭代数组元素,只能遍历到表中出现的第一个不是整数的key,遇到nil则退出
函数:
table.insert(arr,1,var)
#t 表示获取table表t的连续的key中的最大个数
例:
1、当键值为字符串等其他类型时,该操作符返回的值无法确认,比如
t = { x = "a", y = "b", z = "c"}
#t --输出是0
2、当键值为数值但不连续时,比如:
t = {"a", "b", "c"}
#t -- 同第一个范例,此时正常为3
t[5] = "e"
#t --此时输出依然为3,因为t[4]为nil,计数到3处停止
综上,如果你的table是纯粹当一个连续的数组在用,那么#t是很方便的获得table长度的方法;
但如果你的table中key的数值不连续,或者有其他类型的key那么还是不要指望#能给出多有意义的结果来
2.1 全局变量
1、全局变量不需要声明,默认初始值是nil,给一个变量赋值后就创建了这个全局变量,
如果要删除一个全局变量,只需要将其赋值为nil,Lua是大小写敏感的。
注释: 单行注释 --
多行注释 --[[
2.2 值和类型
Lua是动态类型语言,变量不需要类型定义
Lua中有8个基本类型:
类型:nil :一个全局变量没有被赋值以前默认值为nil,给全局变量赋值nil、可以删除该变量
类型:boolean :Lua中所有的值都可以作为条件。在条件中除了false和nil,其他值都为真,所以0和空串都为真
类型:number :表示实数,整数类型和浮点数类型都属于number
类型:string :
类型:userdata :
类型:function :
类型:thread :
类型:table :
变量没有预定义的类型,每一个变量都可能包含任一种类型的值。
在运行时,Lua会自动转换string和number之间的类型
特殊字符:
.. 字符串连接
显式转换string成number: 函数tonumber() 如果string不是正确的数字则返回nil
显式转换number成string: 函数tostring()
2.3 表达式
二元运算符:+ - * / ^ 加、减、乘、除、幂
一元运算符:- 负数
这些运算符的操作数都是实数
关系运算符:< > <= >= == ~=
小于 大于 小于等于 大于等于 等于 不等于
返回结果为false或true
==和~=比较两个值,如果两个值类型不同,Lua认为两者不同
nil只和自己相等
Lua通过引用比较tables、userdata、functions,当且仅当两者表示同一个对象时相等
Lua比较数字按数字大小,比较字符串按字母顺序,但是字母顺序依赖于本地环境
逻辑运算符:and or not
逻辑运算符认为false和nil是假,其他都为真,0也是真
and 和 or 的运算结果和它的两个操作数相关
a and b 如果a为false,则返回a,否则返回b
a or b 如果a为true,则返回a,否则返回b
and 的优先级比 or 高
C语言中的三元运算符 a?b:c
在Lua中写成:(a and b) or c
算术运算符的优先级如下:
^
not -
* /
+ -
..
< > <= >= == ~=
and
or
注意:lua没有自增运算符和自减运算符
2.4 语句
2.4.1 赋值语句
-----------------------------------------------------------------------------------------
三、Lua table的使用
表table是Lua特有的,最简单的构造函数是{},用来创建一个空的表。可以直接初始化数组:
days = {"Sunday","Monday","Tuesday","Wednesday","thrusday","Friday","Saturday"}
Lua 用 "Sunday" 初始化days[1],因为Lua中的表第一个元素的元素索引为1
用 "Monday" 初始化days[2],
....
table获取元素值可以使用days["key"]来获取,或者索引下标days[i]
a = {x=0,y=0}
等价于
a = {};
a.x=0;
a.y=0;
标准库中提供了几种迭代器,包括
io.lines 迭代文件的每一行
pairs 迭代table的元素,pairs可以遍历表中的所有key,可以返回nil
ipairs 迭代数组元素,只能遍历到表中出现的第一个不是整数的key,遇到nil则退出
函数:
table.insert(arr,1,var)
#t 表示获取table表t的连续的key中的最大个数
例:
1、当键值为字符串等其他类型时,该操作符返回的值无法确认,比如
t = { x = "a", y = "b", z = "c"}
#t --输出是0
2、当键值为数值但不连续时,比如:
t = {"a", "b", "c"}
#t -- 同第一个范例,此时正常为3
t[5] = "e"
#t --此时输出依然为3,因为t[4]为nil,计数到3处停止
综上,如果你的table是纯粹当一个连续的数组在用,那么#t是很方便的获得table长度的方法;
但如果你的table中key的数值不连续,或者有其他类型的key那么还是不要指望#能给出多有意义的结果来