查看: 46|回复: 2

[lua]编程基础:作用域、判断与内存结构

[复制链接]

65

主题

79

回帖

1690

积分

金牌会员

社会你狗哥

积分
1690
发表于 2026-5-25 14:01:19 | 显示全部楼层 |阅读模式
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中,只有两种情况是假值:
  • nil(空值)
  • false(假)
其他所有情况都是真值,包括数字0、空字符串等。
多条件判断(elseif)
当需要判断多个条件但只想执行其中一个时,使用elseif。程序会按顺序判断,遇到第一个为真的条件就执行对应的代码,然后退出整个判断结构,后面的条件不再判断。
比较运算符
  • 大于、小于、大于等于、小于等于
  • 等于(==):判断两个值是否相等
  • 不等于(~=):判断两个值是否不相等
重要提醒
比较时不仅比较数值,还会比较类型。例如数字1和字符串"1"是不相等的,因为它们类型不同。
自动类型转换
当字符串内容是纯数字时,Lua会自动将其转换为数字类型进行运算。例如字符串"11"乘以数字1,结果会变成数字11。

三、内存结构:栈与堆
栈(Stack)
可以把栈理解为客厅,空间小但存取速度快。局部变量、临时变量、函数参数等都会放在栈上,而且通常放在栈顶,因为栈顶存取最快。
栈的特性:先进后出
就像一叠盘子,最后放上去的盘子最先被拿走。变量依次进入栈中,后进入的压在先进入的上面。
堆(Heap)
堆就像大仓库,空间大但存取速度相对慢。复杂的数据结构(如table)会存储在堆中。
寄存器
比栈更快的存储区域,但由虚拟机自动管理,我们不需要关心。
实际应用建议
初学阶段只需理解:局部变量在栈上,存取快;复杂数据在堆上。不需要深入研究垃圾回收、生命周期管理等底层机制,Lua已经自动处理好了。

四、浮点型(Float)
基本概念
浮点型就是可以有小数点的数字,"浮点"意味着小数点的位置可以浮动。
单精度与双精度
  • 单精度:占用内存小,精度较低(小数点后约8位)
  • 双精度:占用内存大,精度很高(小数点后约20位)

单选投票, 共有 4 人参与投票
100.00% (4)
0.00% (0)
您所在的用户组没有投票权限

65

主题

79

回帖

1690

积分

金牌会员

社会你狗哥

积分
1690
楼主 发表于 2026-5-25 14:01:51 | 显示全部楼层
[lua]编程基础:作用域、判断与内存结构

33

主题

47

回帖

1323

积分

金牌会员

积分
1323
QQ
发表于 2026-6-2 12:47:16 | 显示全部楼层
看帖回复事一种美德
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表