| Lua编程基础:作用域、判断与内存结构一、作用域(Scope) 什么是作用域? 作用域可以理解为一个独立的内存空间,就像房间一样。每个房间(作用域)里的东西,其他房间是拿不到的。 局部变量与作用域的关系 - 局部变量只在定义它的作用域内有效
- 当作用域结束时,局部变量的生命周期也结束了
- 使用局部变量最重要的两个作用:控制生命周期、避免变量污染
do-end结构 在实际生产代码中很少使用,但在测试时很有用。两个do和end之间就形成了一个独立的作用域。 嵌套作用域的理解 可以把外层作用域想象成301房间,内层作用域想象成302房间。在302房间里定义的变量,301房间是访问不到的。但如果一个变量在301房间定义,在302房间里是可以访问到的,因为302房间在301房间"里面"。 控制结构自带作用域 if-then-end等控制结构内部是自带作用域的,在它们内部定义的局部变量,外部无法访问。 二、判断语句(if语句)基本结构 判断语句由三个固定部分组成:if、then和end,缺一不可。 执行逻辑 if和then中间的部分用于判断是否为真。如果为真,就执行then后面的代码;如果为假,可以跳过或者用else执行其他代码。 真值与假值 在Lua中,只有两种情况是假值: 其他所有情况都是真值,包括数字0、空字符串等。 多条件判断(elseif) 当需要判断多个条件但只想执行其中一个时,使用elseif。程序会按顺序判断,遇到第一个为真的条件就执行对应的代码,然后退出整个判断结构,后面的条件不再判断。 比较运算符 - 大于、小于、大于等于、小于等于
- 等于(==):判断两个值是否相等
- 不等于(~=):判断两个值是否不相等
重要提醒 比较时不仅比较数值,还会比较类型。例如数字1和字符串"1"是不相等的,因为它们类型不同。 自动类型转换 当字符串内容是纯数字时,Lua会自动将其转换为数字类型进行运算。例如字符串"11"乘以数字1,结果会变成数字11。 三、内存结构:栈与堆栈(Stack) 可以把栈理解为客厅,空间小但存取速度快。局部变量、临时变量、函数参数等都会放在栈上,而且通常放在栈顶,因为栈顶存取最快。 栈的特性:先进后出 就像一叠盘子,最后放上去的盘子最先被拿走。变量依次进入栈中,后进入的压在先进入的上面。 堆(Heap) 堆就像大仓库,空间大但存取速度相对慢。复杂的数据结构(如table)会存储在堆中。 寄存器 比栈更快的存储区域,但由虚拟机自动管理,我们不需要关心。 实际应用建议 初学阶段只需理解:局部变量在栈上,存取快;复杂数据在堆上。不需要深入研究垃圾回收、生命周期管理等底层机制,Lua已经自动处理好了。 四、浮点型(Float)基本概念 浮点型就是可以有小数点的数字,"浮点"意味着小数点的位置可以浮动。 单精度与双精度 - 单精度:占用内存小,精度较低(小数点后约8位)
- 双精度:占用内存大,精度很高(小数点后约20位)
|