Lua语法学习(二)
来源:互联网 发布:dva矩阵吸大 编辑:程序博客网 时间:2024/06/06 00:07
- Lua流程控制
通过程序设定一个或多个条件判断来完成流程控制,当条件为true时执行指定代码,当条件为false时执行其他代码
控制结构中的条件表达式结果可以是任何值,Lua认定false和nil为假,true和非nil为真
注意的是Lua中的0为true
if(0)then print("0 为 true")end
输出结果
0 为 true
if
Lua if语句格式
if(boolean)then --在boolean为 true 时执行的语句end
例
a = 10;if( a < 20 )then print("a 小于 20" );endprint("a 的值为:", a);
输出结果
a 小于 20
a 的值为: 10
if..else
Lua if..else语句格式
if(boolean)then --boolean为 true 时执行该语句块else --boolean为 false 时执行该语句块end
例
a = 100;if( a < 20 )then print("a 小于 20" )else print("a 大于 20" )endprint("a 的值为 :", a)
输出结果
a 大于 20
a 的值为 : 100
if嵌套
Lua if嵌套语句格式
if(boolean1)thean --当boolean1为true时执行语句块 if(boolean2) then --当boolean2为true时执行语句块 endend
例
a = 100;b = 200;if( a == 100 )then if( b == 200 ) then print("a 的值为 100 b 的值为 200" ); endendprint("a 的值为 :", a );print("b 的值为 :", b );
输出结果
a 的值为 100 b 的值为 200
a 的值为 : 100
b 的值为 : 200
- Lua函数
Lua 函数定义格式
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separatedend
其中,optional_function_scope为函数修饰符,未设置则是全局函数,如果需要设置为局部函数则要使用修饰符local
function_name为函数名
argument1, argument2, argument3…, argumentn为参数,也可以不带参数
function_body为函数中需要执行的语句块
return result_params_comma_separated为函数返回值,可返回多个值,每个值用逗号隔开
例
function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; endprint("两值比较最大值为 ",max(10,4))print("两值比较最大值为 ",max(5,6))
输出结果
两值比较最大值为 10
两值比较最大值为 6
同时我们可以将函数作为参数传递给函数,例
myprint = function(param) print("这是打印函数 - ##",param,"##")endfunction add(num1,num2,functionPrint) result = num1 + num2 -- 调用传递的函数参数 functionPrint(result)endmyprint(10)-- myprint 函数作为参数传递add(2,5,myprint)
输出结果
这是打印函数 - ## 10 ##
这是打印函数 - ## 7 ##
多返回值
Lua函数可以返回多个值,例
function maximum (a) local mi = 1 -- 最大值索引 local m = a[mi] -- 最大值 for i,val in ipairs(a) do if val > m then mi = i m = val end end return m, miendprint(maximum({8,10,23,12,5}))
输出结果
23 3
可变参数
Lua函数可以接受可变数目的参数,和C语言类似在函数列表中使用三点(…)表示函数有可变参数,例
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("总共传入 " .. #arg .. " 个数") return result/#argendprint("平均值为",average(10,5,3,4,5,6))
输出结果
总共传入 6 个数
平均值为 5.5
Lua 运算符
Lua提供以下几种运算符类型
算术运算符
关系运算符
逻辑运算符
其他运算符算术运算符
关系运算符
逻辑运算符
其他运算符
运算符优先等级
^
not - (unary)
* /
* -
..
< > <= >= ~= ==
and
or
- Lua字符串
Lua语言中字符串可以用三种方式来表示
单引号间的一串字符串
双引号间的一串字符串
[{和}]间的一串字符串
例
string1 = "aaa"print("\"字符串 1 是\"",string1)string2 = 'runoob.com'print("字符串 2 是",string2)string3 = [["abc"]]print("字符串 3 是",string3)
输出结果
“字符串 1 是” aaa
字符串 2 是 runoob.com
字符串 3 是 “abc”
字符串大小写转换
例
string1 = "Lua";print(string.upper(string1))print(string.lower(string1))
输出结果
LUA
lua
字符串查找与反转
例
string = "Lua Tutorial"-- 查找字符串print(string.find(string,"Tutorial"))reversedString = string.reverse(string)print("新字符串为",reversedString)
输出结果
5 12
新字符串为 lairotuT auL
其他常用函数
计算字符串长度,字符串连接,字符串复制等
例
string1 = "www."string2 = "runoob"string3 = ".com"-- 使用 .. 进行字符串连接print("连接字符串",string1..string2..string3)-- 字符串长度print("字符串长度 ",string.len(string2))-- 字符串复制 2 次repeatedString = string.rep(string2,2)print(repeatedString)
输出结果
连接字符串 www.runoob.com
字符串长度 6
runoobrunoob
- Lua数组
一维数组
一位数组是最简单的数组,可以使用for循环出数组中的元素,例
array = {"Lua", "Tutorial"}for i= 0, 2 do print(array[i])end
输出结果
nil
Lua
Tutorial
在Lua中索引值是从1开始,也可以设定成0开始
此外还可以以负数为数组的索引值
array = {}for i= -2, 2 do array[i] = i *2endfor i = -2,2 do print(array[i])end
输出结果
-4
-2
0
2
4
多维数组
数组中包含数组或一维数组的索引值所对应的数组
例
-- 初始化数组array = {}for i=1,3 do array[i] = {} for j=1,3 do array[i][j] = i*j endend-- 访问数组for i=1,3 do for j=1,3 do print(array[i][j]) endend
输出结果
1
2
3
2
4
6
3
6
9
Lua迭代器
迭代器是一种对象,用于遍历标准模板容器中的部分或全部元素泛型for迭代器
泛型for在自己内部函数保存迭代函数,实际上保存三个值:迭代函数,状态常量,控制变量
泛型for迭代器中提供了集合的key/value对,语法格式如下:
for k, v in pairs(t) do print(k, v)end
k,v为变量列表;pairs(t)为表达式列表
例
array = {"Lua", "Tutorial"}for key,value in ipairs(array) do print(key, value)end
输出结果
1 Lua
2 Tutorial
无状态迭代器
指不保留任何状态的迭代器
例
function square(iteratorMaxCount,currentNumber) if currentNumber<iteratorMaxCount then currentNumber = currentNumber+1 return currentNumber, currentNumber*currentNumber endendfor i,n in square,3,0do print(i,n)end
输出结果
1 1
2 4
3 9
迭代的状态包括被遍历的表(状态常量)和当前索引下标(控制变量)
function iter (a, i) i = i + 1 local v = a[i] if v then return i, v endendfunction ipairs (a) return iter, a, 0end
多状态的迭代器
array = {"Lua", "Tutorial"}function elementIterator (collection) local index = 0 local count = #collection -- 闭包函数 return function () index = index + 1 if index <= count then -- 返回迭代器的当前元素 return collection[index] end endendfor element in elementIterator(array)do print(element)end
输出结果
Lua
Tutorial
- Lua语法学习(二)
- LUA学习(二)---基本语法
- Lua语法学习笔记(二)
- Lua基础语法学习(二)+Lua5.3参考手册
- Lua语法学习(一)
- Lua语法学习(一)
- lua学习(二)
- lua脚本的基本语法(二)
- Lua语法小贴士(二)string库
- LUA基本语法二
- lua学习(二)----c++调用LUA
- Lua单例(lua学习二)
- lua学习之入门(二)----基础语法1
- Lua学习(三)----基本语法
- LUA学习(三) 基本语法
- Lua学习总结(基本语法)
- Lua语法学习笔记(一)
- Lua学习笔记(2):基本语法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 立体神经网络模拟连续不完备系统
- java反射泛型异常:argument type mismatch解决方案
- 关于selenium中定位不到元素,切换frame
- HOA 日志跟踪查看
- Lua语法学习(二)
- 获取rootviewcontroller Whose view is not in the window hierarchy 错误的解决办法
- imageview的scaletype
- Bootstrap Table获取并展示数据列表
- java设计模式之观察者模式
- 独立测试团队在敏捷开发中的几个特别实践
- Solr服务的搭建
- 对于等比例缩放代码设置说明!
- pandas数据处理