一 控制结构
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)最佳实践
局部变量在'使用时'再声明',避免'漏掉初始化'这个局部变量