《lua程序设计》读书笔记 第四章:语句
来源:互联网 发布:python 爬虫 url去重 编辑:程序博客网 时间:2024/06/11 14:30
4.1 赋值
Lua支持“多重赋值”,即可以一次性将多个值赋予多个变量。
a,b = 10, 2*x
在多重赋值中,Lua先对等号右边所有元素求值,然后才执行赋值,这样便可以进行交叉赋值
x,y = y,xa[i], a[j] = a[j], a[i]
Lua总是会将等号右边值的个数调整到与左边变量数量相等。规则是:若值的个数少于变量个数,则多余的变量被赋予nil;若值的个数多于变量个数,则舍多余的值。
a,b,c = 0, 1 -->c为nila,b = 0, 1, 2 -->值2被舍弃
注意要初始化一组变量,应为每个变量都提供一个值
a,b,c = 0 -->只有a被赋值a,b,c = 0, 0, 0
多重赋值语句并不比等价的多条赋值语句更快。其一般比较多用于交换两个变量的值,以及收集函数的多个返回值。
4.2 局部变量与块
通过local语句来创建局部变量。与全局变量不同的是,局部变量的作用域仅限于声明它的那个块。一个块是一个控制结构的执行体、或者是一个函数的控制体,再或者是一个程序块。另外,局部变量会屏蔽相同名称的全局变量。
x=10local i = 1while i <= x do local x = i * 2 print(x) -->局部变量x i = i + 1endprint(x) -->全局变量x
尽可能的使用局部变量是一种良好的编程习惯,局部变量可以避免污染全局作用域,此外,访问局部变量比访问全局变量更快,最后,一个局部变量通常会随着其作用域的结束而消失,这样便使垃圾收集器可以及时释放其值。
在Lua中,有一种习惯的写法:
local foo = foo -->用全局变量foo来初始化局部变量foo
这种写法可以加速在当前作用域中对foo的访问。
4.3 控制结构
4.3.1 if then else
若要编写嵌套的if,则用elseif
结构:
if cond then ... endif cond then ... else ... endif cond then ... elseif ... then ... else ... end
4.3.2 while
结构:
while cond ...end
4.3.3 repeat
结构:
repeat ...until cond
4.3.4 数字型for
结构:
for var = exp1,exp2,exp3 do ...end
var从exp2变化到exp2,每次变化步长递增exp3,exp3若不指定,则默认为1, 如果不想给循环设置上限,则可以使用math.huge:
for i = 1, math.huge do ...end
另外还需要注意一些细节,首先,for的三个表达式是在循环开始前一次性求值的,其次,控制变量会自动声明为for语句的局部变量,并且只在循环体内部可见,因此,控制变量在循环结束后就不存在了。最后一点,不要在循环过程中改变控制变量的值,否则将导致不可预知的结果。
4.3.5 泛型for
泛型for通过迭代器来遍历所有值。泛型for通过不同的迭代器,几乎可以遍历所有东西,并且写出的代码极具可读性。标准库提供了几种迭代器,包括io.lines,pairs,ipairs,string.gmatch等。
泛型for和数字型for有两个2共同点:1.循环变量是循环体的局部变量;2.绝不应该对循环变量做任何赋值。
4.4 break与return
break语句用于结束一个内部循环,而不会影响外层的循环,return则用于结束一个函数的执行。
由于语法构造的原因,break或return只能是一个块的最后一条语句。换句话说, 它们是程序块的最后一条语句,或者是end、else、until前的最后一条语句
有时我们希望那些位于return后面的语句无法执行(比如调试时),那么可以通过手动添加do end来实现:
function foo() do return end ...end
- 《lua程序设计》读书笔记 第四章:语句
- Lua程序设计第二版(笔记) 第四章语句
- Lua程序设计(第2版)第四章学习随笔——语句
- JavaScript高级程序设计----读书笔记,第四章
- 《lua程序设计》读书笔记 第三章:表达式
- 《lua程序设计》读书笔记 第五章:函数
- 《lua程序设计》读书笔记 第六章:深入函数
- <Lua程序设计>读书笔记
- Lua学习笔记 第四章 语句
- 《Linux程序设计第四版》读书笔记 - 第二章 Shell程序设计
- Lua程序设计:第4章 语句
- 《lua程序设计》读书笔记 第一章:开始
- .Net框架程序设计-读书笔记(第四章 类型基础)
- 读书笔记_GDI+程序设计_第四章(文本和字体)
- 《Linux程序设计第四版》读书笔记 - 第三章 文件操作
- JavaScript高级程序设计(第3版)第四章读书笔记
- JavaScript高级程序设计读书笔记(第四章)(一)
- lua程序设计第二版 读书笔记(1-4章)
- 生活不止眼前的苟且,还有诗和远方的田野
- 快速排序
- LNMP一键安装包
- 软件模块划分(实现与管理)
- SVN A C D M G U R I的含义
- 《lua程序设计》读书笔记 第四章:语句
- 视频质量测试(主客观),讲解视频知识,8K视频技术测试
- (一)配置Linux系统的网络IP地址
- 关于微信小程序登陆的问题
- Entity Framework Core 中使用多个DBContext时要注意
- TCP连接建立和释放的有限状态机
- 开发者应该负责多少代码?
- Oracle
- Common causes of nans during training