Lua的简单使用,以及一些简单的数据类型

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
end

getNext=Get1()
getNext()

 输出:让我们一起为爱

Lua不支持重载,使用同一个方法会进行覆盖

function Add()
a=1
b=2
c=a+b
print(c)
end        --3

function Add(a,b)
c=a+b
print(c)
end

Add(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()                --2022

G2()                --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])
end

for 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

猜你喜欢

转载自blog.csdn.net/m0_71624363/article/details/129893283