• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua语言学习

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  详细讲解见菜鸟教程 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=
                      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua中pairs和ipairs的区别发布时间:2022-07-22
下一篇:
lua_next()发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap