在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
详细讲解见菜鸟教程 Lua。
一、数据类型1 -- 直接输出 2 print("hello") 3 4 5 -- 全局变量 6 b = 11 7 print(b) 8 9 10 11 -- nil(空) 12 print(type(a)) 13 -- 对于全局变量和table,nil 还有清空的作用 14 15 16 -- number(数字) 17 -- Lua 默认只有一种number类型 -- double(双精度) 18 19 20 -- string(字符串) 21 -- 字符串由一对双引号或单引号来表示 22 string1 = "this is string1" 23 string2 = 'this is string2' 24 -- 在尝试对一个数字字符串进行算术操作时,Lua会尝试将数字字符串转换成数字 25 print("16" + 6) 26 -- 字符串连接 .. 27 print(16 .. 6) 28 -- 字符串长度 # 29 print(#string1) 30 31 32 -- table(表) 33 a = {} 34 -- 数组的索引可以为数字或者字符串 35 a["key"] = "value" 36 key = 10 37 a[key] = 22 38 -- 遍历 39 for k,v in pairs(a) do 40 print(k .. ":" .. v) 41 end 42 -- Lua里表的初始索引一般以 1 开始,而不是 0 43 -- table 长度不固定,会自动增加 44 45 -- function(函数) 46 -- 函数名字f,包含一个参数 n 47 -- 主要实现阶乘的计算 48 function f(n) 49 if n==0 then 50 return 1 51 else 52 return n * f(n-1) 53 end 54 end 55 -- 调用函数 56 print(f(5)) 57 -- 函数可以存储在一个变量中 58 f1 = f 59 print(f1(5)) 60 61 -- 匿名函数参数传递 62 -- 函数名 f1,有两个参数,其中第二个参数为一个函数 63 function f1(tab, f2) 64 for k, v in pairs(tab) do 65 -- 输出函数返回的值 66 print(f2(k, v)) 67 end 68 end 69 70 -- 新建表 71 tab = {"a", "b", "c"} 72 -- 调用函数,匿名函数作为参数传入 73 -- 注意key是从1开始的 74 f1(tab, 75 function(key, val) -- 匿名函数 76 return key .. " = " .. val 77 end 78 ) 79 80 81 -- 变量 82 a = 5 -- 全局变量 83 local b = 10 -- 局部变量 84 -- Lua可以对多个变量同时赋值 85 x,y = 11,12 86 print(x .. "," .. y) 87 -- 交换x,y的值 88 x,y = y,x 89 print(x .. "," .. y) 90 -- 多值赋值也可用来接收函数返回的多个变量 91 function f() 92 return 11, 12 93 end 94 x,y = f() 95 print(x .. "," .. y)
二、循环1 -- while 语句 2 a = 10 3 -- 从10输出到20 4 while(a < 20) 5 do 6 print("a = " .. a) 7 a = a + 1 8 end 9 10 11 -- for 语句 12 -- 数值for循环 13 -- 从10变化到1,每次步长为-1 14 for i=10, 1, -1 do 15 print("i = " .. i) 16 end 17 -- 泛型for循环 18 days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} 19 -- i为数组索引值,v是对应索引的数组元素值,ipairs为迭代器 20 for i,v in ipairs(days) do 21 print(v) 22 end 23 24 25 -- repeat...until 语句 26 -- 循环直到a>15 27 a = 10 28 repeat 29 print(a) 30 a = a + 1 31 until(a > 15) 32 33 34 -- break 语句 35 for a = 10,1,-1 do 36 print(a) 37 if(a < 5) 38 then 39 break -- 当a<5,跳出循环 40 end 41 end
三、流程控制1 -- if...elseif..else 语句 2 a = 100 3 if(a == 10) 4 then -- a=10 5 print("a 的值为 10") 6 elseif(a == 20) 7 then -- a=20 8 print("a 的值为 20") 9 else -- 没有匹配。注意不需要then 10 print("没有匹配的值") 11 end 12 13 14 -- if嵌套语句 15 a = 100 16 b = 200 17 if(a == 100) 18 then -- a=100 19 if(b == 200) 20 then -- a=100且b=200 21 print("a = " .. a .. " b = " .. b) 22 end 23 end
四、函数1 -- 多返回值 2 -- 寻找最大值和最大值所在的位置 3 function maximum(a) 4 local mi = 1 -- 最大值位置 5 local m = a[mi] -- 最大值 6 for k,v in ipairs(a) do 7 if(v > m) then -- 更大 8 m = v 9 mi = k 10 end 11 end 12 return m, mi -- 输出最大值及其索引 13 end 14 15 -- 输出最大值及其索引 16 print(maximum({8, 10, 13, 6, 15, 9})) 17 18 -- 可变参数 19 -- 求不确定参数个数的平均值 20 function averge(...) 21 result = 0 22 -- 可变参数可以赋值给变量 23 local arg = {...} 24 for k,v in ipairs(arg) do 25 result = result + v 26 end 27 -- #可以获取...长度 28 print("总共传入 " .. #arg .. " 个数") 29 -- 返回平均值 30 return result/#arg 31 end 32 33 -- 输出平均值 34 print("平均值为 " .. averge(10, 5, 3, 4, 5, 6))
五、运算符1 -- 算术运算符 2 -- + - * / 加减乘除 3 -- % 取余 ^ 乘幂 - 负号 4 5 6 -- 关系运算符 7 -- == 等于 ~= 不等于 8 -- > < >= <= 大于 小于 大于等于 小于等于 9 10 11 -- 逻辑运算符 12 -- and 逻辑与 or 逻辑或 not 非 13 14 15 -- 其他运算符 16 -- .. 连接两个字符串 17 -- # 返回字符串或表的长度
六、字符串1 -- 字符串大小写转换 2 s = "Lua" 3 print(string.upper(s)) -- 大写 4 print(string.lower(s)) -- 小写 5 6 7 -- 字符串查找与反转 8 s = "Lua Tutorial" 9 -- 查找字符串,若查找成功,返回头和尾,否则返回nil 10 print(string.find(s, "Tutorial")) 11 -- 字符串反转 12 reverses = string.reverse(s) 13 print(reverses) 14 15 16 -- 字符串格式化 17 date = 2 18 month = 1 19 year = 2014 20 -- 日期格式化 21 print(string.format("%02d/%02d/%04d", date, month, year)) 22 -- 十进制格式化 23 print(string.format("%.3f", 1/3)) 24 25 26 -- 字符与ASCII码的转换 27 -- 转换第一个字符 28 print(string.byte("Lua")) 29 -- 转换第三个字符 30 print(string.byte("Lua", 3)) 31 -- 转换倒数第一个字符 32 print(string.byte("Lua", -1)) 33 -- ASCII转字符 34 print(string.char(97)) 35 36 37 -- 字符串长度 38 s = "Lua Tutorial" 39 print(string.len(s)) 40 41 42 -- 模式匹配 43 -- 搜索 dd/mm/yy 格式的日期 44 s = "Deadline is 30/05/1999, firm" 45 date = "%d%d/%d%d/%d%d%d%d" 46 print(string.sub(s, string.find(s, date))) 47 -- 去除空格 48 -- gsub 返回的第二个参数为替代字符的个数 49 print(string.gsub(s, " ", ""))
七、数组1 -- 一维数组 2 array = {} 3 -- 初始化数组 4 -- 注意数组下标默认从1开始,但是也可以自定义下标 5 for i=-2, 2 do 6 array[i] = i*2 7 end 8 -- 遍历数组 9 for i=-2, 2 do 10 print(array[i]) 11 end 12 13 -- 二维数组 14 array = {} 15 maxRow = 3 16 maxColumn = 3 17 -- 初始化3行3列数组 18 for row=1,maxRow do 19 array[row] = {} 20 for col=1,maxColumn do 21 array[row][col] = row * col 22 end 23 end 24 -- 遍历数组 25 for row=1,maxRow do 26 for col=1,maxColumn do 27 print(array[row][col]) 28 end 29 end
八、迭代器1 -- pairs和ipairs区别 2 -- pairs 可以遍历集合的所有元素,即可以遍历集合中的所有key 3 -- ipairs 按照索引升序遍历,索引中断停止遍历 4 tab = { 5 [1] = "a", 6 [2] = "b", 7 [4] = "c" -- 注意索引值没有3 8 } 9 10 -- pairs 11 -- 输出 a,b,c 12 for k, v in pairs(tab) do 13 print(v) 14 end 15 16 -- ipairs 17 -- 只输出 a,b 18 for k, v in ipairs(tab) do 19 print(v) 20 end
九、表(table)1 -- 初始化表 2 mytable = {} 3 -- 指定值 4 mytable[1] = "Lua" 5 -- 移除引用 6 -- 之后Lua垃圾回收会释放内存 7 mytable = nil 8 9 10 -- table 连接 11 fruits = {"banana","orange","apple"} 12 -- 直接连接 13 print(table.concat(fruits)) 14 -- 指定连接字符 15 print(table.concat(fruits, ",")) 16 -- 指定要连接的字符串 17 print(table.concat(fruits, ", ", 2, 3)) 18 19 20 -- 插入和删除 21 fruits = {"banana","orange","apple"} 22 -- 在末尾插入 23 table.insert(fruits, "watermelon") 24 print(table.getn(fruits)) 25 -- 在指定位置插入 26 table.insert(fruits, 2, "pear") 27 print(fruits[2]) 28 print(table.getn(fruits)) 29 -- 删除指定位置的元素 30 print(table.remove(fruits, 4)) 31 print(table.getn(fruits)) 32 33 34 -- 排序 35 fruits = {"banana","orange","apple","grapes"} 36 print("排序前") 37 for k,v in ipairs(fruits) do 38 print(k,v) 39 end 40 41 -- 排序,默认为升序 42 table.sort(fruits) 43 print("排序后") 44 for k,v in ipairs(fruits) do 45 print(k,v) 46 end 47 48 49 -- 注意使用 # 和 table.getn 其都会在索引中断的地方停止计数, 50 -- 而导致无法正确取得 table 的长度 51 -- 可以用以下的方法 52 function table_leng(t) 53 local leng= |
请发表评论