Lua语言基本数据类型
数值型
所有数字包括十六进制和科学计数法
逻辑型
相当于布尔型:true和false
字符串型
由“”或‘’括起的各类字符
函数
可以在代码中实现某种功能的语句块
表
Lua语言的核心之一,类似于哈希表
自定义型
脚本用户只能使用,不能对其进行定义
线程
线程类型的值是一个可用于异步计算的协同程序(轻量有限线程)
空类型
什么也没有,空的意思。
局部变量关键字:local
注释符:–
运算符与组块
数字运算符
加法:+
减法:-
乘法:*
除法:/
幂:^
取模:%
取负:-
整除://
比较运算符
等于:==
小于:<
大于:>
小于等于:<=
大于等于:>=
不等于:~=
关系运算符
和:and
或:or
非:not
连接:..(连接两字符串)
初识函数
在lua中,函数都是function类型的对象,他可以被比较,可以赋值给一个变量,传递给函数,从函数中返回,或者作为table表中的键
定义
function 函数名(参数)
函数内容
end
关键字return
返回值
Return只能出现在语句块的结尾一句
定义不定参数个数的函数(函数的可变参数)
Function 函数名(固定参数列表,…)
回收的可变参数列表:arg 内
判断语句
格式
第一种格式:
if 表达式 then
语句块
end
第二种格式:
if 表达式 then
语句块1
else
语句块2
end
第三种格式:
if 表达式1 then
语句块1
elseif 表达式2 then
语句块2
…
end
循环语句
while…do语句
while 循环条件 do
循环体
end
repeat…until语句
repeat
循环体
until 循环条件
for…do语句
for 变量=初始值,终止值,步长do
循环体
end
for…in…do语句
for 两个变量 in列表 do
循环体
end
其中第一个变量为数组索引值,第二个为元素值,ipairs为迭代器函数
关键词break
使循环停止跳出正在执行的循环,只能在循环中使用。
表
定义
表是lua语言特有的强大的数据类型,是用来存储其他元素的一个实体,通常这些元素都是互相关联的,它是成对元素的一个集合,每一对元素都有一个关键字(键)和一个值组成,在表中我们可以用一个关键字来索引它唯一对应的值。
定义
表名={}
表的键值从1开始
定义键值
表名={键值=“变量”}
这么做的话默认的数字键值会跳过该变量赋键值
调用该变量可用表名.索引值使用,但是无法索引键值为数字的元素。
删除元素
将该元素定义为nil(空值)
添加元素
表名[“键值”]=变量
或
表名.键值=变量
函数也可作为表的元素添加
表名
获取表长度
表作为数组时添加元素
table.insert(表名,键值,变量)
若不写键值,默认将变量添加到表末
若添加数字键值,会将原来的元素的键值都向后加1(如:添加键值为2的元素,会将原来键值为2的值依次向后重新排列)
表作为数组时删除元素
table.remove(表名,键值)
不写键值时默认删除表最后一个元素
高级函数
string.sub()函数
截取子字符串
string.sub(字符串,开始下标,终止下标)
第一个参数为要被截取的字符串
第二个参数为开始下标
第三个参数是结束下标
返回值就是截取后的子字符串。
tonumber()函数
将字符串转化为数字型
tonumber(字符串,可选函数)
第一个参数为要转化的字符串
第二个参数为进制
返回值的丢失
如果函数调用所得的多个返回值是另外一个函数的最后一个参数或者是多指派表达式中的最后一个参数时,所有的返回值将被传入或使用,否则,只有第一个返回值被使用或指定。
select()函数
slect()函数它的作用是允许指定从第几个返回值开始取值。这个函数可以接受任意数目的参数,其中第一个参数用来决定函数的行为,当第一个参数为“#”时,selsct()简单返回其余参数的个数,当第一个参数为一个数字时,selsct()返回其余从这个位置开始直到最后一个的参数。
函数的尾调用
当函数的最后返回结果是调用另一个函数,称之为尾调函数。Lua在调用尾调函数时,先是弹出当前函数的栈空间,然后再调用尾调函数,从而降低了函数层层调动过程中的栈消耗,非常适用于函数递归调用。
递归与迭代
递归
程序调用自身的编程技巧称为递归,是函数自己调用自己。一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量。
迭代
让程序对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
迭代是对某个变量的重复推算,而递归是自身对自身的调用。
函数库
基本库
调用格式
库名.函数名()
基本库中的函数无需添加“库名.”
tostring(参数):将参数转化为字符串格式
tonumber(参数):将参数转化为字符串格式
tupe(参数):返回参数的类型名
rawest(表,键,值):更改表中指定键对应的值,返回表的指针。
rawget(表,键):获取表中指定键对应的值,当键不存在时返回nil(仅能用于键为数字的表。)
rawequal(num1,num2):比较两个参数是否相等
dofile(lua程序块):打开并且执行一个lua程序块。
next(表,键):允许程序遍历表中的每一个字段,返回下一个键和该键对应的值。
pair(t)和pairs(t):返回三个值next函数、表、0,多用于穷举表的键和值。
require(文件名):搜索目录加载文件,并判断是否已经加载避免重复加载同一文件。
数学库(math)
abs():取绝对值
acos():反余弦函数
asin():反正弦函数
atan2():x/y的反正切值
atan():反正切函数
ceil():不小于x的最大整数
cosh():双曲线余弦函数
cos():余弦函数
deg():弧度转角度
exp():计算以e为底x次方值
floor():不大于x的最大整数
fmod():取模运算
frexp():把双精度数val分解为数字部分(尾数)和以2为底的指数n
ldexp():计算value*2的n次方
log10():计算以10为基数的对数
log():计算一个数的自然对数
max():取得参数中最大值
min():取得参数中最小值
modf():把数分为整数和小数
pow():得到x的y次方
rad():角度转弧度
random():获取随机数
randomseed():设置随机数种子
sinh():双曲线正弦函数
sin():正弦函数
sqrt():开平方函数
tanh():双曲线正弦函数
tan():正切函数
表库(table)
concat(表,分隔符,开始下标,结束下标):返回参数中表内从开始下标到结束下标中的所有数组部分,并且分隔符隔开。后三个参数为可选参数。
insert(表,键,值):在指定表中插入一个指定的键和值。参数键可以省略。省略插入的值将被放置于表的最后一位。
maxn(表):返回指定表中所有正数键值中的最大键。若不存在键为正数的元素,则返回0。
remove(表,键):删除并返回表的数组部分指定键的元素,其后的元素会被前移。省略键参数,则从最后一个元素删起。
sort(表,comp):对给定的表进行升序排序。comp为一外部函数,该函数应满足:接受两个参数a、b,并返回一个布尔型值,当a应排在b前面时,返回true,反之为false
foreachi(表,function(i,v)):会期望一个从数字1开始的连续整数范围,遍历表中的键和值逐对进行function(i,v)操作。
foreach(表,function(i,v)):遍历整个表。
getn(表):返回table中元素的个数。
setn(表,个数):设置表中元素的个数
字符串库(string)
len(字符串):测试字符串长度。
rep(字符串,数值):返回字符串的n个拷贝。
lower(字符串):字符串内字母全小写。
upper(字符串):字符串内字母全大写。
sub(字符串,参数,参数):从字符串中截取某个或某段子字符串。第三个参数可以省略,则截取第二个参数到最后一个字符。
byte(字符串,参数):返回字符串中参数所指向字符的ascii码。
char(参数,参数):将ascii码转化为对应字符。
gsub(字符串,被替换字符串,替换字符串,参数):替换字符串中的某一部分,参数为需要替换的个数。
find(字符串,子字符串,参数):在字符串中查找与子字符串相同的部分,参数为指定从第几个字符开始查找,返回第一次找到子字符串的位置。
format(格式化字符串,格式化参量):格式化字符串
操作系统库(os)
clock():返回一个程序使用CPU时间的一个近似值
time():按参数的内容返回一个时间值(从1970年1月1日开始计经过了多少秒),若不带参数则返回当前时间。参数元素:year,month,day,hour,sec,isdst
tmpname():返回一个临时文件名
getenv(varname):返回当前进程的环境变量varname的值,若变量没有定义时返回nil
remove(filename):删除文件或一个空目录,若函数调用失败则返回nil加错误信息
rename(oldname,newname):更改一个文件或目录名,若函数调用失败则返回nil加错误信息
exit(code):终止主程序,code为返回值
difftime(t2,t1):返回t1到t2相差秒数。
date(format,time):返回一个格式化日期、时间的字符串或表
流与文件库(io)
read():读取数据
write():输出数据
参数:“all”:读取整个文件 “line”:读取下一行 “*number”:从串中转换出一个数值 num:读取num个字符串
input(文件名)和output(文件名):input设置参数内的文件为输入文件,output设置参数内文件为输出文件。
flush():输出所有缓冲区中的内容到默认输出文件
close():用于关闭被打开的文件。
open(filename,mode):按指定模式打开一个文件,成功返回文件句柄,失败返回nil+错误信息。mode:“r”:读(默认)“w”:写 “a”:添加模式 “r+”:更新模式,所有之前的数据将被保存 “w+”:更新模式,所有之前的数据将被清除 “a+”:添加更新模式,所有之前的数据将被保存,只允许在文件尾进行添加 “b“:某些系统支持二进制方式。
评论前必须登录!
注册