Lua中的语句
【赋值】
赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许“多重赋值”,也就是一下子将多个值赋予多个变量,例如以下代码:
local x1, x2 = ,
print(x1) -->2
print(x2) -->4
在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值,例如以下用法,可以非常简便的交换两个元素的值:
local x1, x2 = ,
x1, x2 = x2, x1
print(x1) -->4
print(x2) -->2
Lua总是会将等号右边值得个数调整到与左边变量的个数相一致,规则是:如果值得个数少于变量的个数,那么多余的变量会被赋为nil;如果值得个数更多的话,那么多余的值会被忽略掉。
【局部变量与块】
相对于全局变量,Lua同时也提供了局部变量。通过local语句来创建局部变量:
i = -->全局变量
local i = -->局部变量
在Lua中,局部变量也是有作用范围的,也就是说,出了局部变量的作用范围,局部变量就会失去作用,这个和C++等高级语言是一样的道理。我们在编程的过程中,也可以使用do…end来显示的声明一个块,例如以下代码:
do
local a1 =
local a2 =
end -->a1和a2的作用域到此结束
至于使用局部变量和全局变量,关系到编程风格和实际需要,这里不做多说。
【控制结构】
几乎所有的语言都有控制结构,同样,对于Lua的控制结构是非常简单的。Lua提供了用于条件执行的if,循环的while、repeat和for。所有的控制结构都有一个显式的终止符:if、for和while以end作为结尾,repeat以until作为结尾。特别注意,在Lua中是不支持switch结构的。
if then else
if语句先测试其条件,然后根据测试结果执行then部分或者else部分,else部分是可选的。如果要编写嵌套的if,可以使用elseif,下面通过代码示例来说明if的使用。
if a < then a = end
if a < b then retuan a else return b end if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
end
while
Lua中的while与其它语言是一样的,示例代码如下:
local a =
while a > do
a = a -
-- Do something else
end
repeat
repeat就好比C++中的do…while结构,循环体至少会执行一次。repeat-until语句重复执行其循环体直到条件为真时结束。
在Lua中有两种for语句的形式:数字型for和泛型for
数字型for
数字型for的语法如下:
for var = exp1, exp2, exp3 do
-- Do something
end
var从exp1变化到exp2,每次变化都以exp3作为步长进行递增,并执行一次do…end之间的代码。第三个表达式exp3是可选的,若不指定的话,Lua会将步长默认为1。例如以下代码:
for var = , do
print(var)
end for var = , , - do
print(var)
end
在使用for时,需要注意以下两点:
1.for的exp1,exp2和exp3,这三个表达式是在循环开始前一次性求值得;并不会每次循环都进行求值;
2.控制变量var会被自动的声明为for语句的局部变量,并且仅在循环体内可见。
泛型for
泛型for循环通过一个迭代器函数来遍历所有值。在Lua的基础库中提供了ipairs,这是一个用于遍历数组的迭代器函数。从外观上看泛型for比较简单,但其实它是非常强大的。通过不同的迭代器,几乎可以遍历所有的东西。标准库提供了几种迭代器,包括用于迭代文件中每行的io.lines、迭代table元素的pairs、迭代数组元素的ipairs和迭代字符串中单词的string.gmatch等。当然了,我们也可以编写自己的迭代器,在以后的文章中,我会总结如何编写迭代器的。
【break与return】
break和return语句用于跳出当前的块。这里的break、return和C++等语言是一样的。break语句用于结束一个循环,return语句用于从一个函数中返回结果。
Lua中的语句的更多相关文章
- Lua中的常用语句结构以及函数
1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {} ] ] then ]) == gTable[] then ]) else print("unkown ...
- lua中清空目录和递归创建目录
lua中的 lfs.mkdir lfs.rmdir只能针对单个目录,且lfs.rmdir不能清空文件夹 于是我想到了使用os.execute 递归创建目录如下os.execute("mkdi ...
- lua中的table、stack和registery
ok,前面准备给一个dll写wrapper,写了篇日志,看似写的比较明白了,但是其实有很多米有弄明白的.比如PIL中使用的element,key,tname,field这些,还是比较容易混淆的.今天正 ...
- Lua中的协同程序 coroutine
Lua中的协程和多线程很相似,每一个协程有自己的堆栈,自己的局部变量,可以通过yield-resume实现在协程间的切换.不同之处是:Lua协程是非抢占式的多线程,必须手动在不同的协程间切换,且同一时 ...
- Lua中的捕获
Lua中的捕获 捕获 捕获是这样一种机制:可以使用模式串的一部分匹配目标串的一部分.将你想捕获的模式用圆括号括起来,就指定了一个捕获.在string.find使用捕获的时候,函数会返回捕获的值作为 ...
- [译] Closures in Lua - Lua中的闭包
原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...
- lua中的面向对象编程
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 上述代码会输出tb1 ~= tb2.说明两个具有相同值得对象是两个不同的对象,同时在Lua中table是引用类型的 ...
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
- Lua中的函数
[前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数 ...
随机推荐
- codeforces#1136 C. Nastya Is Transposing Matrices(找规律)
题意:给出两个n*m的矩阵,每次操作可以让一个正方形矩阵行列交换.问,在无限次操作下,第一个矩阵能否变成第二个矩阵 分析:先把操作限定在2*2的矩阵中.这样对角线上的元素就可以随意交换.也就是说,如果 ...
- 软件工程(GZSD2015) 第二次作业小结
第二次作业,从4月7号开始,陆续开始提交作业.根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好.然后有一些普遍存在的问题 ...
- 该错误的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表 ...
- Lodop简短问答客户反馈篇 及排查步骤 及注册相关
A.http下打印图片正常,https下打印图片是××.(有的客户端可以,有的不可以)重置ie浏览器试试.客户反馈:(和ie浏览器的设置有关)intenet选项--高级里,我调整为和能打印出图片的电脑 ...
- Active Directory: LDAP Syntax Filters
LDAP syntax filters can be used in many situations to query Active Directory. They can be used in VB ...
- Python【第五篇】模块、包、常用模块
一.模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- 压测过程中,获取不到redis连接池,发现redis连接数高
说明:图片截得比较大,浏览器放大倍数看即可(涉及到隐私,打了码,请见谅,如果有疑问,欢迎骚扰). 最近在压测过程中,出现获取不到redis连接池的问题 xshell连接redis服务器,查看连接数,发 ...
- 关于vue的域名重定向和404
//创建路由对象并配置路由规则 let router = new VueRouter({ routes:[ {path:'/',redirect:{name:"index"}}, ...
- 第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)
在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...
- Python之False和None
这个其实在Python文档当中有写了,为了准确起见,我们先引用Python文档当中的原文: In the context of Boolean operations, and also when ex ...