文章目录
零、相关文章
一、前言
哈喽大家好,我是 FEZ98 ,休息了几天,今天继续系统学习Lua。这个系列是我系统学习Lua语言的学习笔记,我会把遇到的一些比较值得记录与关注的知识写在里面,供自己以后进行回顾。
二、Lua 变量
(1)三种变量类型
Lua变量有三种类型:全局变量、局部变量*(local)
、表中的域。
如果不用local
显示声明变量为局部变量,则Lua中的变量全是全局变量,哪怕是在语句块或是函数中。局部变量的作用域从变量声明位置至语句块结束位置。
变量的默认值为nil。
(2)赋值语句
Lua可以同时对多个变量进行赋值操作,变量与值之间需要用,
隔开。
可以直接用多变量赋值的方法进行变量值得交换操作,与C#、 Java需要用temp变量作为交换容器的操作区别。
该操作对于数组与表类型同样适用。
下图中的a["t1"]
与a.t3
为获取table的指定索引的值。
当赋值时,变量个数少于值个数,多余的值被忽略。
当赋值时,变量个数多于值个数,多余的变量默认赋值为nil。
多赋值经常用来交换变量,或者将函数调用返回给变量。
(3)索引
对table的索引适用方括号[]
。Lua也提供了.
操作。
采用索引访问的本质是类似gettable_event(t,i)
的函数调用。
三、Lua 循环
(1)While 循环
Lua 中While
循环语法:
流程图如下:
示例:
(2)for 循环
Lua 中for
循环语法:
var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3可选,,如果不指定,默认为1。
Lua 中for 循环分为两大类:
1.
数值
for 循环
2.泛型
for 循环
(2.1) 数值for 循环
for 循环的三个表达式在循环开始前一次性求值,之后不再进行求值,求值后结果将用在后面的循环中。
可以看到函数multipleFive(x)与setTwo(x)只在for 循环开始前执行一次。
实例2如下,for循环用于数组中:
(2.2) 泛型for 循环
Lua 中泛型for 循环的语法:
其通过一个迭代器函数来遍历所有值,类似C#与Java中的 foreach 语句。i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。
pairs
与ipairs
都可以遍历数组和表中的key 并返回key 与其对应的值
不同之处:
pairs
:
返回按照数据定义或者插入的顺序返回
ipairs
:
- ipairs 遍历的key只能是数字,并且数字是从1开始且连续的。
- ipairs 返回按照key 的升序返回。
下图是使用 pairs 对 字符串表进行泛型for 循环操作,结果正常显示:
下图是使用 ipairs 对 字符串表进行泛型for 循环操作,没有输出值:
(3)repeat…until 循环
repeat…until循环语法:
与while 和for 循环在执行前进行判断不同,repeat...until在当前循环语句结束后才进行条件判断。
repeat…until 循环流程图如下:
实例:
(4)Lua 循环嵌套
(4.1)While 循环嵌套:
Lua 中While
循环嵌套语法:
实例:
(4.2)for 循环嵌套:
Lua 中for
循环嵌套语法:
实例:
(4.3)repeat…until 循环嵌套:
Lua 中repeat...until
循环嵌套语法:
实例:
(4.4) 混合循环嵌套:
Lua 可以混合用不同的循环类型来进行嵌套。
实例:
(5)循环控制语句
(5.1) break 语句
Lua 中的Break 语法:
如果使用循环嵌套,Break语句将停止最内层循环的执行,跳回执行外层的循环语句。
实例:
(5.2) goto 语句
Lua 中的goto 语法:
goto 语句将控制流程无条件地转移到被标记的语句处。
注意: goto的语法特性是在Lua 5.2 引入的,如果使用 Lua 5.1,则会报 unexpected symbol near ':' 的错误!!!
如何查看Lua 的版本:在cmd 中输入 'Lua -v'
如何升级Lua版本(目前最新版本:lua-5.4.6):
windows环境下编译安装注意上面的这个教程里,省略了一些步骤,这里进行相应的一些补充:
1.此处红圈的文件夹是由从官网下载的lua文件解压两次的文件。
2.build.bat文件需要进行相应的修改,绿圈处改为你想要安装的位置,红圈处为步骤1中解压出来的lua 文件。
3.该步骤可省略,因为在build.bat 中已将lua 添加至环境变量中。
实例1:
实例2:
实例三(使用goto 实现 continue)
:
(6)无限循环
在循环体中如果条件永远为 true 循环语句就会永远执行下去。
实例:
引用
1.RUNOOB.COM