【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. GBDT原理学习

    首先推荐 刘建平 的博客学习算法原理推导,这位老师的讲解都很详细,不过GBDT的原理讲解我没看明白, 而是1.先看的https://blog.csdn.net/zpalyq110/article/de ...

  2. There are 0 datanode(s) running and no node(s) are excluded in this operation.

    向hadoop导入文件,报错 .... There are 0 datanode(s) running and no node(s) are excluded in this operation. . ...

  3. (1.5)MySQL表的5种分区类型

    (1.5)MySQL表的5种分区类型 关键词:mysql表分区    小细节: (1)Null 将会放入最小范围区间 (2)无论哪种类型的分区,要么没有主键.唯一键,要么分区表的主键/唯一键都必须包含 ...

  4. 帝国cms文章页调用当前文章URL如何操作?

    前面我们讨论过dedecms文章页调用地址(当前文章URL)如何操作,作为同台竞技的帝国cms也能在文章页调用当前文章URL吗?答案是肯定的!那就随ytkah一起来探索一下吧 帝国cms模板是在后台直 ...

  5. Amazon SQS(Simple Queue Service) 简单介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hongchangfirst/article/details/25877059 SQS即Simple ...

  6. 20181223 python 使用Beautiful Soup

    (这篇,没什么营养价值) 怎么说呢! 爬虫吧!把html页面进行解析得到有效数据,而beautiful soup 能快速格式化页面再进行方法对数进行提取,存入想要存入的DB中. from bs4 im ...

  7. Cartographer源码阅读(3):程序逻辑结构

    Cartographer早期的代码在进行3d制图的时候使用了UKF方法,查看现有的tag版本,可以转到0.1.0和0.2.0查看,包含kalman_filter文件夹. 文件夹中的pose_track ...

  8. distpicker省市区插件初始化选中值的问题

    $('#distpicker1').distpicker('destroy')  //当需要重新生成的时候,需要先销毁 $('#distpicker1').distpicker({ province: ...

  9. 【LeetCode每天一题】Combination Sum II(组合和II)

    Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...

  10. python安装pandas模块

    直接安装时报错了 localhost:~ ligaijiang$ pip3 install pandas Collecting pandas Downloading https://files.pyt ...