【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. 洛谷P4247 序列操作 [清华集训] 线段树

    正解:线段树 解题报告: 传送门! 通过这题我get了一个神奇的,叫,线段树五问的东西hhhh 听起来有点中二但感觉真正做题的时候还是比较有用的,,,?感觉会让条理清晰很多呢,所以放一下QwQ →每个 ...

  2. 前端 HTML body标签相关内容 常用标签 定义列表<dl>

    定义列表<dl> 定义列表的作用非常大. <dl>英文单词:definition list,没有属性.dl的子元素只能是dt和dd. <dt>:definition ...

  3. 20181017 PL/SQL 记录

    1. 配置DB 链接文件,帮助中找到tnsnames.ora文件路径,进行注册数据库信息,登陆即可. 这只是个客户端,具体服务器段数据库情况不清楚. 2.写法区别PL/SQL 和SQL 变量定义 赋值 ...

  4. O(N)的时间寻找最大的K个数

    (转:http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2624799.html) 寻找N个数中最大的K个数,本质上就是寻找最大的K个数中最小的那 ...

  5. python的执行顺序

    为了区分是主动执行(如python test.py)还是被动调用(如import test),python用__name__来进行标识. 当主动执行时,__name__为__main__,当被调用时, ...

  6. 微信小程序https发起请求失败的解决方法

    https://blog.csdn.net/yuhui123999/article/details/60572888 https://blog.csdn.net/yuhui123999/article ...

  7. 异常Exception分类

    1:编译时被检测异常:只要有是Exception和其子类都是,除了特殊子类RuntimeException体系.       这种问题已但出现,希望在编译时进行检测,让这种问题有对应处理方式      ...

  8. 多态使用时,父类多态时需要使用子类特有对象。需要判断 就使用instanceof

    instanceof:通常在向下转型前用于健壮性的判断,判断是符合哪一个子类对象 package Polymorphic; public class TestPolymorphic { public ...

  9. (转)java调用python脚本

    这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...

  10. 分词、词性标注POS等学习【转载】

    转自:https://cloud.tencent.com/developer/article/1091815 1. 分词(Word Cut) 英文:单词组成句子,单词之间由空格隔开 中文:字.词.句. ...