Lua学习笔记(一)

一、环境搭建

初学lua,首先要做的就是搭建环境

首先下载lua,解压。

添加环境变量:

随后安装ide,我用的vscode,官网下载vscode

下载之后安装,lua debug

新建lua文件,ctrl+N(或者右上角新建)

然后ctrl+s保存文件,开始编译。

二、基本语法

基础数据类型:

基础数据类型
nil表示无效,在表达式中等于false,可以将一个变量赋值为nil来删掉他
booleantrue和false
number双精度浮点数
string字符串
function函数,并且作为“第一类值”看待
table“关联数组”,无固定大小,Lua主要的数据结构机制,超强
userdata表示一种由应用程序或c语言库所创建的新类型
thread线程

--使用--表示单行注释
a=5;       --lua可用分号,也可不用
b=2.0     --声明一个变量直接赋值,变量类型根据赋值来
c="qwe"
d=false
e={}      --声明一个空的table
function PrintType(x)   --定义一个函数
	print(type(x))       --lua自带print,type函数,type函数返回变量的类型
end                      --表示函数体结束

PrintType(a)
PrintType(b)
PrintType(c)
PrintType(d)
PrintType(e)
PrintType(PrintType)

print(f)  --值得一提的是,当访问一个没有被定义的变量时会返回nil

定义域:

a=5                              --全局变量a
do                               --定义一个语句块
	local a=6                    --局部变量a,局部变量优先级大于全局变量
	print("局部变量a在语句块中的值:"..a)--..用于连接字符串
end                              --语句块结束

print(table.concat({"全局变量a的值:",a}))--另一种字符串连接方式,速度更快
--[[
	--[[多行注释]]--
    将上面那句语句展开
	local temtable={"全局变量a的值:",a} --初始化一个table,并赋值
	print(table.concat(tamtable))--table的内置函数,不会改变原table结构
]]--

function AddOne(x)
	local b=1
	return x+b
end

print(table.concat({"在函数中定义的局部变量b:",b}))

流程控制:

lua中有if、while、for及repeat循环

代码演示:

--假设现在做1到10的累加
--for循环
--[[
i从exp1变化到exp2,变化到exp2时停止循环
每次exp1递增exp3,并执行循环体,若不写exp3,则默认递进1
    for i=exp1,exp2,exp3 do    
        循环体
    end
]]--
do
    local sum=0
    for i = 1, 10 do
        sum=sum+i    --sum做累加,lua不支持sum++
    end
    print(table.concat({"sum的值为",sum}))
end
--while循环
do
    local sum=0
    local i=1
    while i<=10 do --当while后的条件为真时执行循环
        sum=sum+i
        i=i+1
    end
--[[
    table.unpack,接受一个数组作为参数,并默认从下标1开始返回数组的所有元素
    遇到数组下有nil,返回nil,有字母key的时候,也返回nil
    local info={1,2,3,nil,5,p=6}
    local a,b,c,d,e,f=table.unpack(info)
    print(a,b,c,d,e,f)
    输出结果:1   2   3   nil    5   nil
]]--
    print(table.unpack{"sum的值为",sum})
end
--repeat循环
do
    local sum,i=0,1 --lua允许多重赋值,若值的个数少于变量个数,变量被赋值为nil,多余则会被丢弃
    repeat
        sum=sum+i
        i=i+1
    until i>10  --条件为真时执行
    print(table.concat({"sum的值为",sum}))
end

结果:

if语句演示:

do
    local _inputnum=1
    if _inputnum==1 then
        print("打印了1")
    elseif _inputnum==2 then
        print("打印了1")
    end
end

for循环还可用作迭代器:pairs 与ipairs、以及for循环遍历

代码示例

table1={1,2,100,"Hello"}
for _kay,_val in pairs(table1) do  --pairs循环能遍历到table数组里面所有的key
    print(_kay,_val)
end

table1={[1]=1,[2]=2,[4]=4,["Hello"]="hello"}
for _kay,_val in ipairs(table1) do       --ipairs在table中一旦遇到nil就停止,table1的[3]为nil
    print(_kay,_val)
end
print("table[3]="..type(table1[3]))   --使用..可以连接两个字符串,但效率很低,一般不推荐

他们的效率比较:

table1={}

for i=1,100000000 do             --初始化table
    table.insert(table1,i)       --往table1最后面插入一个数字
end
--ipairs
startTime=os.clock()            --开始时间
for k,v in ipairs(table1) do 
    table1[k]=v
end
endTime=os.clock()              --结束时间
print("ipairs的时间:",endTime-startTime)
--pairs
startTime=os.clock()
for k,v in pairs(table1) do
    table1[k]=v
end
endTime=os.clock()
print("pairs的时间:",endTime-startTime)
--for
startTime=os.clock()
for i=0,#table1 do
    table1[i]=i
end
endTime=os.clock()
print("for的时间:",endTime-startTime)

三次结果:

结论:for快,ipairs其次,pairs慢。

另外:for循环的条件只计算一次,即后面更改for的循环条件,也不会改变循环次数

table1={1,2,3}

for i=1,#table1 do
    table.insert(table1,i)
    print("table的长度:",#table1)
end

若有问题,请指出
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值