Lua语言特色
【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语言特色的更多相关文章
- Lua语言中文手册 转载自网络
Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ...
- 用VC编译lua源码,生成lua语言的解释器和编译器
用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...
- 51CTO专访淘宝清无:漫谈Nginx服务器与Lua语言
http://os.51cto.com/art/201112/307610.htm 说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx.虽然说Apache依然是Web服务器的老 ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- lua语言入门之Sublime Text设置lua的Build System
转自: http://blog.csdn.net/wangbin_jxust/article/details/8911956 最近开始学习LUA语言,使用Sublime Text作为编辑器,不得不说, ...
- 编译并使用Lua语言
Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...
- Lua语言在Wireshark中使用(转)
1. 检查Wireshark的版本是否支持Lua 打开Wireshark,点击“HelpàAbout Wireshark”菜单,查看弹出的对话框,如果有“with Lua 5.1”表示支持 ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
- lua语言自学知识点----Lua与.Net相互调用
知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...
随机推荐
- @media screen and (max-width: 960px)与@media (max-width: 960px) 有screen与没有screen的区别
我们先来看下下面这段代码,估计很多人在响应式的网站CSS很经常看到类似下面的这段代码: @media screen and (max-width: 960px){ body{ background: ...
- Python 标准输出 sys.stdout 重定向(转)
add by zhj: 其实很少使用sys.stdout,之前django的manage.py命令的源码中使用了sys.stdout和sys.stderr,所以专门查了一下 这两个命令与print的区 ...
- 重新安装phpstudy之后出现了403的错误
1. httpd.conf 文件,找到如下代码: DocumentRoot "D:\WWW" <Directory /> Options +Indexes +Follo ...
- JavaScript、关于元素的offset~和client~
1.偏移量(offset dimension) =>offsetLeft(元素距离其父元素左边框(/上边框)的距离) =>offsetTop =>offsetWidth(元素的宽 ...
- 【Loadrunner】Loadrnner 参数化策略
Loadrnner 参数化策略 参数化策略 关键:类型+数据+策略 1.Select next row ( 如何取) 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下 ...
- Java面试总结(面试流程及核心面试题)
Java面试流程及核心面试题 面试整体流程 1.1 简单的自我介绍 我是xxxx,工作xxx年.我先后在xxxx公司.yyyy公司工作.先后做个xxxx项目.yyyy项目. 1.2 你简单介 ...
- 唯美MACD
上证30 分钟产生背离,60 分钟高位,但并没有背离,若调整,也是30F 级别的.算是上涨途中的歇脚. 1.股票如果非要从MACD 上去判断怎么拿,那么一句话:要大跌,一般都需要背离.所以,没有背离的 ...
- 虚拟主机是设置在httpd-vhosts.conf还是vhosts.conf还是httpd.conf
https://blog.csdn.net/weisubao/article/details/43536723 解决方案:虚拟主机是设置在httpd-vhosts.conf还是vhosts.conf还 ...
- [LeetCode] 566. Reshape the Matrix_Easy
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- CentOS6.5安装Tomcat8.0
1.首先从官网下载最新的安装包 http://tomcat.apache.org/ apache-tomcat-8.0.20.tar.gz 2.上传安装包到 /usr/local/mypackage ...