Lua学习笔记03:Lua语句

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 23:09   26   0

一、Lua中赋值为修改一个变量或table中某索引的值
Lua允许多重赋值,多个值赋值给多个变量,每个变量和值用","隔开,若等号右边有表达式,Lua会先求出表达式的值,然后再赋值(例:a,b=10,2*x -->a=10 b=2*x)
x,y=y,x a[i],a[j]=a[j],a[i](相当于交换两个变量) 若多重赋值时变量数大于赋值的值,则多出来的变量会被自动赋为nil;若赋值的值大于变量数,则多出来的数会被自动舍弃
二、局部变量(在一个变量名前面添加local关键字,则该变量会被声明为局部变量)
例:local i=1 (i为局部变量)
局部变量的作用域为声明该变量的块(即控制结构的执行体或函数的执行体或程序块)
当声明了一个全局变量后,在某个代码块中声明的局部变量的变量名可以与某个全局变量名相同,但在该代码块中使用该变量名后使用的是拥有该变量名的局部变量
在编译软件中每行都会生成一个程序块,局部变量只在该行程序块中有效,因此可以用"do.........end"语句来界定一个程序块,在"do......end"中声明的局部变量会在该程序块中有效
局部变量可以避免某些无用的名称引入全局环境,局部变量的调用比全局变量更快。一个语句块生命周期结束后,其内的局部变量也会被自动丢弃。局部变量的赋值方式除了在变量名前加local关键字以外,其他地方与全局变量的赋值方式相同,若声明的局部变量开始时没被赋值,则该局部变量的值为nil。局部变量可以把全局变量的值保存起来,例(local asd=asd(等号右边的asd为全局变量,即使全局变量asd后来改变了,但局部变量的asd也不会改变))
三、控制结构
Lua提供了几种小巧的控制结构:用于条件执行的if,用于迭代的while、repeat、for。
所有控制结构都有一个显式的终止符:if、for、while是以end为结尾,repeat以until为结尾
控制结构中的条件表达式可以是任何值,Lua会将条件表达式中所有除nil和false以外的值视为真
1、if语句:if 条件表达式 then 代码块 (else 代码块) end
如果条件表达式结果为真,则执行then的代码块,否则执行else的代码块
例:1、if a<0 then a=0 end
2、if a<b then
a=0
else
a=b
end
3、if语句嵌套:
if op=="+" then
r=a+b
elseif op=="-" then
r=a-b
else
r=0
end
(嵌套时else后面不要加空格,直接加if然后空格添加表达式,再空格加then)
2、while循环语句:while 条件表达式 do 代码块 end
先判断条件表达式是否为真,如果为真,则执行do后面的代码块然后再次判断,直到表达式为假为止
3、repeat语句:repeat 代码块 until 条件表达式
先执行代码块,再进行判断,当until后面的条件表达式为真时将不再循环执行repeat中的代码块
在Lua的某个循环体中声明了一个局部变量后,该局部变量的生命周期可以用到条件测试中,但再次进入循环体后该局部变量会被重置为之前设置的值
例:repeat
local a=0;
a=a+1
until a>b
4、for语句:
1--数值型for语句的语法:
for var=exp1,exp2,exp3 do
代码块
end
var代表一个变量名,它的初始值为exp1,每次都会增加exp3,当值不为exp2时,执行代码块,否则跳出循环;若没有指定exp3的值,则默认每次循环var就加1;for循环中控制变量var会在循环开始前进行运算求值,其var会被声明为该for循环的局部变量,循环体结束后会自动销毁,如果要在循环体结束后访问该var变量的值,必须把该var值保存到另外一个变量中
不要在循环过程中修改控制变量的值,否则会产生不可预知的效果
如果想在for循环正常结束前终止for循环,可在for循环内使用break语句
2--泛型for语句的用法:
a为一个数组
for i,v in ipairs(a) do
print(v)
end
泛型for循环是通过一个迭代器的函数(ipairs():该方法是个迭代器函数,用于遍历数组,括号里添加数组名称)来遍历所有的值
每次循环中i都会赋予一个新的a数组的索引值,而v则会赋予a数组第i个索引值上的元素
t为一个table变量
for k in pairs(t) do
print(k)
end
该for循环通过一个迭代器的函数(pairs():该方法是个迭代器函数,用于遍历table变量中的元素,括号里添加table变量的名称)来遍历所有的值
每次循环k都会赋予table变量k的第i个索引值上的元素
Lua中的几种迭代器:读取文件中每行字符串的lines()、迭代table元素的pairs()、迭代数组的ipairs()等,用户也可以编写自己的迭代器
泛型for循环和数值型for循环相同点:控制变量都是该for循环的局部变量;用户不可以对控制变量进行任何赋值
当在Lua中声明了一个字符串table时,可以用for循环来创建一个以该字符串table索引元素为索引,字符串table索引值为元素的table
例:
a={"a","b","c","d","e"}
b={}
for k,v in pairs(a) do
b[v]=k
end
5、break语句和return语句:都用于跳出当前代码块
break只会跳出有包含该break的循环而不会跳出外层的循环,外层循环在内层被跳出后依然会继续执行
return用于返回一个函数的结果,或用于提前结束一个函数的执行(任何函数都有一个隐式的return语句,若一个函数没有要返回的值,则应该在该函数结尾处添加return语句)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP