Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。
Lua内没有自增++,自减--的操作,只能通过变量=变量+变量(例:a=a+b)。
Lua的连接字符:“..”,而不是“+”
Lua的与、或、非:and、or、~
Lua的nil类型不能和任何数据类型连接吗,但是可以单独输出(会报错)
a=1,
b=nil,
print(a..b) --会报错,nil不能和其他类型连接。只能单独输出
print(a) --a=1
print(b) --b=nil
三目运算符:b=1>2?1:0。在Lua里面b= (x>y) and x or y
x,y=1,2
sum = (x>y) and x or y
print(sum)输出2
在Lua里面所有的东西都可以是变量,没有变量的声明,只有变量的赋值。
获取字符串的长度
#a 获取a字符串的长度
对于变量的多个定义,多出的部分是不会进行输出或者替换之前的,多个定义也不会出现报错
例:a,b=1,2,3、
print(a..b) --输出a..b=12,表示a=1,b=2,3是没有用的数字不会报错
判断语句 if、elseif、else
1、if 条件 then 方法体 end
2、
if 条件 then
方法体
elseif 条件 then
方法体
else
方法体
end
a,b=1,2
if a<b then
print('a<b')
end
if a<b then
print('a<b')
else
print('a>=b')
end
if a<b then
print('a<b')
elseif a==b then
print('a==b')
else
print('a>b')
end
if not(a>b) then
print('a<b')
end
循环语句 for 条件(变量=min,max,自增数)do...end、while 条件 do...end、repeat...until 条件
while 条件 do...end
a,sum=1,0
while a<=10 do
sum=sum+a;
a=a+1
print(sum)
end输出:1、3、6、10、15、21、28、36、45、55
repeat...until 条件
a,sum=1,0
repeat
sum=sum+a;
a=a+1
print(sum)
until a>10输出:1、3、6、10、15、21、28、36、45、55
sum=0
for a=1,10,1 do
sum=sum+a
print(sum)
end输出:1、3、6、10、15、21、28、36、45、55
sum=0
for a=1,-5,-1 do
sum=sum+a
print(sum)
end输出:1、1、0、-2、-5、-9、-14
Lua函数(方法)的使用,定义
function Add()
a=1
b=3
c=b-a
print(c)
end输出:2
function Sub(a,b)
c=a+b
print(c)
Add()
end输出:3、2
function Div(a,b)
c=a+b
return c
end
x=Div(1,2)
print(x)输出:3
function Mu()
a=1
b=3
c=a+b
return c
end
y=Mu()
print(y)输出:4
多个参数的使用 #a代表一大串数字
function Sum(...)
a={...}
b=1;
for i=1,#a do
b=b*a[i]
print(b)
end
end
Sum(1,2,3,4,5,6)输出:1,2,6,24,120,720
函数的嵌套:
function Get()
su = function()
print("hhhh")
end
return su
end
getsu=Get()
getsu()输出:hhhh
function Get1()
return function()
print("让我们一起为爱")
end
endgetNext=Get1()
getNext()输出:让我们一起为爱
Lua不支持重载,使用同一个方法会进行覆盖
function Add()
a=1
b=2
c=a+b
print(c)
end --3function Add(a,b)
c=a+b
print(c)
endAdd(2,3)
输出:5;Add()函数被Add(a,b)覆盖使用
数学函数库的使用
i=153.4
print(math.ceil(i)) --154、math.ceil()向上取整
print(math.floor()) --153、math.floor()向下取整print(math.abs(-12)) --取绝对值
print(math.max(3,5,7,9,2,1)) --取最大值
print(math.min(3,5,7,9,2,1)) --取最小值print(math.pow(2,3)) --次方,2^3
print(math.sqrt(9)) --开平方print(math.deg(math.pi)) --弧度转角度
print(math.cos(math.pi)) --转弧度
print(math.sin(math.pi)) --转弧度
print(math.tan(math.pi)) --转弧度print(math.modf(1.2)) --整数和小数分离
闭包
--闭包例题1
function Get()
local a =10
return function()
print(a)
a=a+1
end
end
F=Get()
F()
输出:10--闭包例题2
function Get1(n)
local function Get2()
print(n)
end
local function Get3()
n=n+10
end
return Get2,Get3
end
G1,G2=Get1(2022)
G1() --2022G2() --2022+10(运算)
G1() --2032(输出功能)
--闭包迭代器效果
function Get(t)
local a=0
return function()
a=a+1
return t[a]
end
end
t={1,2,3,4}
F=Get(t)
print(F())
print(F())
print(F())
print(F())输出:(一个输出一个显示)
1
2
3
4
随机数的使用:
math.randomseed(os.time()) --设置种子
math.random(100)
print(math.random(100)) --随机数输出:随机输出
number类型的转为字符串类型+number类型,会自动转换成number类型
定义的值为数字类型,也是转换为数字类型
b=12、tostring(b)转为字符串类型
print(tostring(b)+2) --15
print('12'+2) --15
print(tostring(b)..2) --123
字符串的使用
a='abcdb'
print(string.upper(a)) --大写
print(string.lower(a)) --小写
print(string.reverse(a)) --反转输出print(string.find(a,'bcd')) --查找 2 4 ,2是查找的的第一个字符的位置,4是最后一个字符的位置
print(string.sub(a,2,3)) --截取a字符串中的第3,第4个字符print(string.rep(a,2)) --重复2次
print(string.gsub(a,'b','!')) --替换 a!cd! 2,2表示替换次数
table表的使用 :
--表:下标从1开始,下标越界的值为nil空
a={1,2,3,'A','b',true}
print(a[-1])
print(a[1]) --第一个下标的值
print(#a) --表的长度
print(table.getn(a)) --表的长度for i=1,#a,1 do --顺序输出
print(a[i])
endfor i=#a,1,-1 do --倒叙输出
print(a[i])
end
自定义索引
1、
b={[0]=1,2,3,'a',[-1]='b',true}
for i=-1,#b,1 do
print(b[i]) --b,1,2,3,a,true
end
print("\n") --换行2、
b={[1]=1,2,3,'a',[2]='b',true}
for i=1,#b,1 do
print(b[i]) --2,3,a,true
end
Lua的模块(实例)也就是C#里面的类
--学生类
Student={
id=1001, --属性
name='小天', -- --属性
Eat=function() --类里面的方法定义
print(Student.name..'好吃真好吃')
end,
Study=function()
print('good good day')
end,
Fly=function(t) --带参数的方法
print(t.name..'会飞')
end
}--调用访问类方法和类属性
print(Student.id..'\t'..Student.name)
Student.Eat()
Student.Study()
--调用带参数的方法
Student.Fly(Student) --方法等价于下面的方法
Student:Fly()--在类的外部添加属性和方法
--添加方法1:
Student.sex='男' --属性
Student.Sleep=function() --方法
print('睡如猪头')
end
--添加方法2:
function Student.Play()
print('玩得很开心')
end--访问外部添加属性、方法
print(Student.sex)
Student.Sleep()
Student.Play()
跨文件调用(调用其他Lua文件的属性)
require('Three') --请求其他Lua文件Three的内容,无法调用局部变量
print(a)
print(b)
访问模块(类)
require('Four')
Four.Play()
Four.Sleep()
读取文件、写文件
--读取,a+可读可写,a
file=io.open('D:\\Lua\\One\\aa.txt','r')
io.input(file)
f=io.read()
print(f)
f=io.read()
print(f)for i in io.lines('D:\\Lua\\One\\aa.txt') do
print(i)
end
io.close()
--写文本(覆盖)
file=io.open("D:\\Lua\\One\\aa.txt",'w')
io.output(file)
io.write('11111')
io.close()--写文本(追加)
file=io.open("D:\\Lua\\One\\aa.txt",'a+')
io.output(file)
--io.write('\n2222')io.write('333')
io.close()--写文本(追加)
file=io.open("D:\\Lua\\One\\aa.txt",'a+')
io.output(file)
--io.write('\n2222')io.write('333')
io.close()
迭代器: pairs,ipairs通过for循环进行迭代器读取
--自定义索引
a={[0]=11,22,33,44,55}
for f,v in pairs(a) do
print(f,v)
end
print('88888888')
for f,v in ipairs(a) do
print(f,v)
end
字典:
a={['id']=1001,['name']='李四',['age']=18}
--读取字典,f为键,v为值
for f,v in pairs(a) do
print(f,v) -- id 1001,name 李四,age 18
end
print('*********')
for _,v in pairs(a) do
print(_,v) --id 1001,name 李四,age 18
end
--ipairs无法读取字典内容
for f,v in ipairs(a) do
print(f,v) --id ,name ,age 读键无法读取值
end
--单独输出键
for f,v in pairs(a) do
print(f) --id ,name ,age
end
--单独输出值
for f,v in pairs(a) do
print(v) --1001 ,李四,18
end
a={11,22,nil,33,44,55}
--pairs遇到nil时会继续遍历,不会显示nil
for f,v in pairs(a) do
print(f,v)
end输出:
1 11
2 22
4 33
5 44
6 55
--ipairs遇到nil时会停止遍历
for f,v in ipairs(a) do
print(f,v)
end输出:
1 11
2 22