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 ...
随机推荐
- P3292 [SCOI2016]幸运数字 线性基
正解:线性基+倍增 解题报告: 先放下传送门QAQ 然后这题,其实没什么太大的技术含量,,,?就几个知识点套在一起,除了代码长以外没任何意义,主要因为想复习下线性基的题目所以还是写下,,, 随便写下思 ...
- 【Python基础】*args,**args的详细用法
Python基础知识:*args,**args的详细用法 参考:https://blog.csdn.net/qq_29287973/article/details/78040291 *args 不定 ...
- TZOJ:玛祖游戏
描述 玛祖是一款非常经典的游戏,游戏的角色是一只青蛙,青蛙每次可以吐出一颗珠子,如果将珠子吐到场景中相同颜色的珠子旁边(称为击中),当三个或者三个以上的同颜色珠子在一起的时候便可以消掉,如果消掉后还有 ...
- 催希凡javaweb 学习28天
看到这样的博客,自己也在看传智播客的视频,收藏一下 催希凡javaweb 学习28天 http://www.cnblogs.com/Prozhu/category/824899.html
- svn .a文件上传不了
最近mac电脑出现了问题,导致硬盘被格式化,所有文件都没了,打开app,一直缺少第三方文件libWeChatSDK.a,打开xcode文件变红了,找不到了,为了预防此类问题,在这里给出解决方法,如果没 ...
- MySQL中any、some、all关键字
MySQL中any.some.all关键字http://blog.csdn.net/imzoer/article/details/8266324 ANY关键字: 假设any内部的查询语句返回的结果个数 ...
- Pro*C介绍
内嵌SQL 概要 Pro*C语法 SQL 预处理指令 语句标号 宿主变量 基础 指针 结构 数组 指示器变量 数据类型同等化 动态SQL 事务 错误处理 SQLCA WHENEVER语句 Demo程序 ...
- MySQL更新
1.两表更新(用一个表更新另一个表) UPDATE t_i_borrower a, t_supplier s SET a.type = s.type WHERE a.cust_id = s.cust_ ...
- 用v-if 来给不同筛选出来的todo添加不同的按钮
凡是数据里面有属性a为2的 我就给它放1,2,3 3个按钮 ,有属性为3的就没得按钮 ,属性a为1的 就给它 13两个按钮 效果如下:
- 前端MD5加密【单向加密】
密码存储的方式: 密码该如何存储呢?按照安全性由低到高,有这样几种选择: 1.密码名文直接存储在系统中 2.密码经过对称加密后再存储 3.密码经过非对称加密后再存储 步骤: 1.用户端:用户提交用户名 ...