Lua基础(九)控制结构和变量的作用域
一 控制结构
Lua语言提供了一组精简且常用的控制结构(control structure),包括用于条件执行的if以及用于循环的while、repeat、for 细节1:所有控制结构语法上都有一个显示的终结符:end-->用于终结if、for、while结构 细节2:until用于终结repeat结构
(1)条件表达式
控制结构的条件表达式的结果可以是任何值 重点: lua只将flase和nil当作假
(2)if
备注:Lua语言不支持switch case语句 ++++++++++++++++++++++++分割线++++++++++++++++++++++++ 1)单选
2)二选一 -->else部分
3)多选一 -->编写嵌套的if语句 -->elseif -->git的多分支
(3)while
(4)repeat
(5)数值型for
for var = exp1, exp2, exp3 do something end 说明:[exp1,exp2]表示迭代的区间,exp3表示循环的步长
(6)泛型for
(7)break、return、goto
1)break 语句:用来退出当前循环(for,repeat,while),在循环外部不可以使用 -->多层循环,不是针对函数 2)return 语句:用来从函数返回结果,当一个函数自然结束结尾会有一个默认的 return --> 只针对函数 强调:Lua 语法要求return 只能是代码块(block)中的最后一句 3)goto了解即可
二 变量作用域
1. 全局变量Lua变量默认是global全局的,在整个会话中将保持不变,除非改变了它. 2. 在使用全局变量时,在变量前加个g字母会更加明确
(1)局部变量
代码块: 可以是一个控制结构的主体、或是一个函数的主体、或是一个代码段-->变量被声明时的文件或字符串 "尽可能地使用局部变量"是一种良好的编程风格 说明:如果函数内没有使用local声明变量,则默认是全局变量 局部变量的作用域仅限于声明它们的哪个块,一个块(block)是一个控制结构的执行体、或者是一个函数的执行体再或者是一个程序块(chunk) ++++++++++++++局部变量的三种形式++++++++++++++ 补充:隐式的局部变量-->for、while、if
① 显式声明局部变量
local var = 1
② 隐式局部变量
③ 显式
可以显式地界定一个块,只需将这些内容放入一对关键字do-end中即可 特点:每当输入了do时,Lua就不会单独地执行后面的每行的内容,而是直至遇到一个相应的end时,才会执行整个块的内容
④ 应用场景
local var = var 这句代码创建了一个局部变量var,并将用全局变量var的值初始化 具体解释:当其它函数改变了全局变量var的值,而代码段又需要保留var的原始值时,尤其是在运行时动态替换 ++++++交换++++++ x, y = y, x --> 交换x与y --> 不需要中间变量
(2)变量作用域
变量按作用域从大到小排列 1)全局环境变量-->(_ENV|_G)列表 2)文件作用范围的local变量 --> "包"或"模块" 3)函数内定义的local变量 4)函数内部程序块或复杂语句中定义的local变量
(3)局部变量的好处
1)局部变量避免由于不必要的命名而造成全局变量的混乱 2)局部变量能避免同一程序中不同代码部分中的命名冲突 3)访问局部变量比访问全局变量更快 4)局部变量会随着作用域的结束而消失,从而使垃圾回收器-->gc能够将其释放
(4)全局变量检查的模块
(5)最佳实践
局部变量在使用时再声明,避免漏掉初始化这个局部变量
