【1】多重赋值

多重赋值规则:若值的个数少于变量的个数,那么多余的变量会被赋值为nil

若值的个数多余变量的个数,那么多余的值会被“悄悄地”丢弃掉。

多重赋值应用示例:

 a, b = , *
print(a, b) -- 10 6 a, b, c = ,
print(a, b, c) -- 0 1 nil a, b = a+, b+, b+
print(a, b) -- 1 2 a, b, c =
print(a, b, c) -- 0 nil nil

【2】repeat

一条repeat-until语句,重复执行其循环体,直到条件为真时结束。

repeat控制语句示例:

 local a =
repeat
a = a +
print(a)
until a == --[[执行结果
20
30
40
50
60
70
80
90
100
]]

【3】elseif结构

由于Lua不支持switch语句,所以这种一连串的if-elseif 代码是很常见的。

elseif应用示例:

 if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
else
error("invalid operation")
end

【4】数字型for 和 泛型for

(1)数字型for

数字型for语法如下:

 for var = exp1, exp2, exp3 do
<执行体>
end

var从exp1开始,以步长exp3(step)递增至exp2,每次变化执行一次"执行体"

第三个表达式exp3是可选的,若不指定,默认步长为1。如下示例:

 for i = , ,  do
print("i =", i)
end --[[
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
]]

(2)泛型for

泛型for循环通过一个迭代器(iterator)函数来遍历所有值。示例如下:

 --打印数组的所有值
a = {, , , , }
for i, v in ipairs(a) do
print(i, v)
end --[[
1 11
2 12
3 13
4 14
5 15
]]

Lua标准库提供了几种迭代器,包括用于迭代文件中每行的io.lines、迭代table元素的pairs、迭代数组元素的ipairs、迭代字符串中单词的string.gmatch等

刚刚写示例时候,无意写了几个这样的for循环,开始懵圈了。。。。。。

 --打印数组的所有值
a = {, , , , }
for i, v in ipairs(a) do
print(i, v)
end --[[
1 11
2 12
3 13
4 14
5 15
]] for v in ipairs(a) do
print(v)
end --[[
1
2
3
4
5
]] for k in pairs(a) do
print(k)
end --[[
1
2
3
4
5
]] for i, v in pairs(a) do
print(v)
end --[[
11
12
13
14
15
]]

那么,到底pairs和ipairs两个容器函数到底有什么区别呢?

请再看以下的分析:

 local table1 = {
[] = "abc",
[] = "def",
[] = "ghi"} for k, v in ipairs(table1) do
print(k, v)
end

上面这个for循环,竟然没有输出任何东东,下面继续看,我们把容器函数改为pairs,如下所示:

 local table1 = {
[] = "abc",
[] = "def",
[] = "ghi"} for k, v in pairs(table1) do
print(k, v)
end --则会输出所有
--[[执行结果
3 abc
4 def
5 ghi
]]

输出了所有内容。再改变一下表的内容,继续观察,如下示例:

 --现在改变一下表内容
local table2 = {
[] = "abc",
[] = "def",
[] = "ghi"} for k, v in ipairs(table2) do
print(k, v)
end --[[执行结果
1 abc
2 def
]] for k, v in pairs(table2) do
print(k, v)
end --[[执行结果
1 abc
2 def
7 ghi
]]

还记得这节时,我们谈及到“Lua标准库提供了迭代table元素的pairs、迭代数组元素的ipairs”这句话了么?

现在想想,ipairs容器函数遍历的是数组,既然是数组,那么就需要从索引为1开始遍历,如果某个索引对应的值为nil,直接视为数组结束,退出循环。

pairs容器函数遍历的是表,既然是表,那么就可以遍历表中所有的key。

下面再看几个验证示例:

 local table3 = {
[] = "liu",
[] = "wang",
[] = "zhao"} for i, v in pairs(table3) do
print(table3[i])
end --[[执行结果
liu
wang
zhao
]] for i, v in ipairs(table3) do
print(table3[i])
end --[[执行结果
liu
]] -- [[示例2.]] local table4 = {"alpha", "beta", [] = "ios", ["two"] = "dos", [] = "windows"} for i, v in ipairs(table4) do
print(table4[i])
end --[[执行结果
alpha
beta
ios
]] for i, v in pairs(table4) do
print(i, table4[i])
end --[[执行结
1 alpha
2 beta
3 ios
5 windows
two dos
]]

结论:pairs可以遍历表中所有key,而ipairs只可以遍历表中数组值。

其实,言归正传,针对泛型for的使用,下面这个例子很常见。代码如下:

 days = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
} revDays = {}
for k, v in pairs(days) do
revDays[v] = k
end for i, k in pairs(days) do
print(i, k)
end --[[ 执行结果
1 Sunday
2 Monday
3 Tuesday
4 Wednesday
5 Thursday
6 Friday
7 Saturday
]] for i, k in pairs(revDays) do
print(i, k)
end --[[ 执行结果
Saturday 7
Tuesday 3
Wednesday 4
Friday 6
Sunday 1
Thursday 5
Monday 2
]]

仔细体会一下其中的便捷性。

【5】其他

Good Good Study,Day Day Up.

顺序 选择 循环 总结

Lua语言特色的更多相关文章

  1. Lua语言中文手册 转载自网络

    Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ...

  2. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  3. 51CTO专访淘宝清无:漫谈Nginx服务器与Lua语言

    http://os.51cto.com/art/201112/307610.htm 说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx.虽然说Apache依然是Web服务器的老 ...

  4. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  5. lua语言入门之Sublime Text设置lua的Build System

    转自: http://blog.csdn.net/wangbin_jxust/article/details/8911956 最近开始学习LUA语言,使用Sublime Text作为编辑器,不得不说, ...

  6. 编译并使用Lua语言

    Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...

  7. Lua语言在Wireshark中使用(转)

    1.       检查Wireshark的版本是否支持Lua 打开Wireshark,点击“HelpàAbout Wireshark”菜单,查看弹出的对话框,如果有“with Lua 5.1”表示支持 ...

  8. Unity进阶----Lua语言知识点(2018/11/08)

    国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...

  9. lua语言自学知识点----Lua与.Net相互调用

    知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...

随机推荐

  1. SecureCRT使用总结

    设置背景和编码

  2. java 流程控制--猜数字

    import java.util.Scanner; import java.util.Random; public class GuessNum{ public static void main(St ...

  3. winform接收全局的快捷键

    public class NativeWIN32 { public NativeWIN32() { } /* ------- using WIN32 Windows API in a C# appli ...

  4. 【托业】【新托业TOEIC新题型真题】学习笔记9-题库七+八--P4-5

    109.intend 意为“打算,意欲”,含有将来的含义,故不用将来时态 110.must do sth 必须做某事 111.recession 经济衰退,不景气 rebound 反弹:反应 recr ...

  5. dedecms批量修改文章为待审核稿件怎么操作

    dedecms批量修改文章为待审核稿件要怎么操作呢?因为我们有时会出于某些原因要把文章暂时先隐藏掉,dedecms有一个比较好的功能是将文件状态设为未审核前台就可以看不到了,那要怎么批量设置呢?到后台 ...

  6. finecms如何调用自定义内容

    我们建站的时间经常会有一些固定的元素,比如电话.地址等,这种相对比较简单的东西可以让编辑人员直接在后台就可以定义,那么finecms有没有这个功能呢?怎么定义?如何调用? finecms后台有一个自定 ...

  7. RN animated帧动画

    效果图: 代码: export default class AnimationFrameScene extends Component { constructor () { super() this. ...

  8. SQL Server 2016 发送邮件功能

    --1 安装好SQL Server 2016 --2 安装.Net 3.5 由于SQL Server 2016 安装不提示强制安装.NET 3.5 但是还是需要安装,数据库发送邮件会使用.NET 3. ...

  9. CA证书和TLS介绍

    数字签名 用自己的私钥给数据加密就叫数字签名 公钥传输威胁 在A和B的通信中,C可以把自己的公钥发给A,让A把C的公钥当成B的公钥,这样的话.B拿到加密数据反而无法解密,而C却可以解密出数据.从而实现 ...

  10. Redis入门到高可用(六)—— 字符串

    一.结构和命令 1.字符串键值结构 key是字符串,value可以是字符串.数字.二进制.json等: redis的key和string类型value限制均为512MB. 2.使用场景 ♦️ 缓存 ♦ ...