这里把所有的测试代码都放进来,有需要的拿吧
--[=[ 多行注释 多行注释推荐使用 --[=[注释内容]\], 这样可以避免遇到table[table[idx]]时就将多行注释结束了。 ]=]-- print("Hello World") -- 基本类型 print("基本类型测试-----------------------------------------------------") print(5.2) print(5) print(math.floor(5.2)) print(true) print(nil) -- 空,相当于null -- 变量 print("局部变量测试-----------------------------------------------------") tat = "hello tat" local tmp = "hell o"-- 存放字符串的引用 print(tat) print(tmp) local obj = nil print(tmp) x,y = 1,2 --多变量赋值 print(x,y) x,y = y,x --赋值时会先计算等号后边的值,相当于交换 print(x,y) a, b, c = 0, 1 --> 0 1 nil --a. 变量个数 > 值的个数 按变量个数补足nil print(a,b,c) a, b = 2,3,4 --b. 变量个数 < 值的个数 多余的值会被忽略 print(a,b,c) --表 print("表测试-----------------------------------------------------") local list={ [0] = 1, --整数索引 test_key = 3,--字符串索引 ["0"] = 4, --字符串索引,和数字0索引不一样 } print(list)--打印出的是地址 print(list[0]) print(list["0"]) print(list["test_key"]) print(list.test_key) list.test_key = "aasdas" print(list.test_key) local list2 = {"apple", "pear", "orange", "grape"}-- 等同于数组,下标从1开始的键值对 for k, v in pairs(list2) do print(k .. " : " .. v) end --函数 print("函数测试-----------------------------------------------------") function add_func(parm1,parm2) print("function insert") print(parm1) print(parm2) print("function end") end add_func(3,4) local func = add_func func(8,9) --字符串 print("字符串测试-----------------------------------------------------") local str = "a" local str2 = "b" local str3 = [[ 这个是多行字符串测试 哈哈 ]] print(str) print(str3) --print(str+str2)--字符串相加错误写法 print(str..str2)--字符串相加正确写法 --流程控制 if-else --只有false和nil为假,其他任何类型都为真 --语法 if (布尔表达式) then (do something) end --只要记得有if出来,就得在后面跟着一个then就好 --if-else 语法 --[[ if(布尔表达式) then --[ 布尔表达式为 true 时执行该语句块 --] else --[ 布尔表达式为 false 时执行该语句块 --] end ]]-- --if...elseif...else --[[ if( 布尔表达式 1) then --[ 在布尔表达式 1 为 true 时执行该语句块 --] elseif( 布尔表达式 2) then --[ 在布尔表达式 2 为 true 时执行该语句块 --] elseif( 布尔表达式 3) then --[ 在布尔表达式 3 为 true 时执行该语句块 --] else --[ 如果以上布尔表达式都不为 true 则执行该语句块 --] end ]]-- print("流程控制测试-----------------------------------------------------") --if if true then print(1) end if nil then print(2) end if false then print(3) end if 0 then print(4) end --if...else --[ 定义变量 --] a = 100; --[ 检查条件 --] if( a < 20 ) then --[ if 条件为 true 时执行该语句块 --] print("a 小于 20" ) else --[ if 条件为 false 时执行该语句块 --] print("a 大于 20" ) end print("a 的值为 :", a) --if...elseif...else --[ 定义变量 --] a = 100 --[ 检查布尔条件 --] if( a == 10 ) then --[ 如果条件为 true 打印以下信息 --] print("a 的值为 10" ) elseif( a == 20 ) then --[ if else if 条件为 true 时打印以下信息 --] print("a 的值为 20" ) elseif( a == 30 ) then --[ if else if condition 条件为 true 时打印以下信息 --] print("a 的值为 30" ) else --[ 以上条件语句没有一个为 true 时打印以下信息 --] print("没有匹配 a 的值" ) end print("a 的真实值为: ", a ) --循环 --任何地方调用break都可以退出循环 --while循环 --[[ while(condition) do statements end ]] --for循环 --[[ var初始值exp1,结束点为exp2,每次增长数为exp3,不写exp3则默认为1 for var=exp1,exp2,exp3 do <执行体> end ]] --[[ 泛型形式 for i,v in ipairs(a) do print(v) end ]] --repeat...until循环 print("循环测试-----------------------------------------------------") --Lua while 循环 a=10 while( a < 15 ) do print("a 的值为:", a) a = a+1 end --Lua for 循环 for i = 0,6,2 do print(i) end days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} for i,v in ipairs(days) do print(i.."+++"..v) end --[=[ --模块 print("模块测试-----------------------------------------------------") -- local file_path = "D:\\studyDir\\gameDir\\lua\\code\\" -- require(file_path.."math_func") local math_func = require("math_func") -- 加载模块的时候,会调用到模块里面的代码,会有一行"math_func is load" local tmp = math_func.absa(-4)--通过导出模块进行调用 print(tmp) tmp = math_absa(-5)--通过直接调用方法 print(tmp) -- math_local_func() -- 模块内部方法,调用失败 require("device") --一次引入,全部地方都能使用 device.module_device_func() math_func.add(1,2)--在add方法里面,也调用了上面那行 ]=]-- --[[ Lua里面自带是没有面向对象的,但是可以这么实现 面向对象,学习路径应该是这样子的: self,冒号,点的概念--》元表的概念--》对象的概念--》继承/重载 ]]-- --面向对象 --self,冒号,点 print("面向对象测试-----------------------------------------------------") --下面的a.test(a,4,6),和b:test(4,6)是等价的 --使用冒号,会默认有self形参 --注意,声明和调用b:test,都是使用冒号 local a = {} function a.test(self,pam1,pam2) print("a.test",self) print(pam1,pam2) end a.test(a,4,6) local b = {} function b:test(pam1,pam2) print("b:test",self) print(pam1,pam2) end b.test(4,6) b:test(4,6) -- 元表 local a = { key1 = "test1" } local meta_a = { __index = { name = "blake", age = 34, sex = 0, key1 = "test2" } } --两个表相加,第一个参数是第一个表,第二个参数也是表 --第二个表就是第一个表的元表 --setmetatable 相加(设置元表) getmetatable 获取元表 setmetatable(a,meta_a) print(getmetatable(a)) --元表里面非常重要的key --特点 -- -- 当我们搜索一个表的key,如果没有找到 -- lua就会去元表的__index里面查找这个key print(a.key1) print(a.name) print(a.name2) --对象 local base = {} --成员函数 function base:test() print("base:test",self) end function base:new(instant) if not instant then instant = {} end setmetatable(instant,{__index = self}) -- 在这里设置的元表 return instant end --这样子new出来的对象是不同的 --因为传递进去的instant为nil local b = base:new() print("b addr is " ,b) b:test() local c = base:new() c:test() --这样子new出来的对象是相同的 local instant = {} local d = base:new(instant) local e = base:new(instant) d:test() e:test() --继承,重载 print("继承,重载 测试-----------------------------------------------------") local person = {} --成员函数 function person:test() print("person:test",self) end function person:get_age() print("person:get_age",self) end function person:new(instant) if not instant then instant = {} end setmetatable(instant,{__index = self}) -- 在这里设置的元表 return instant end local man = person:new() function man:test_man() print("man:test_man",self) end function man:test_man2() print("man:test_man2",self) end function man:get_age() print("man:get_age",self) end local p = man:new() print("p = ====",p) p:test_man() p:test() --重载 p:get_age()
运行结果
Hello World 基本类型测试----------------------------------------------------- 5.2 5 5 true nil 局部变量测试----------------------------------------------------- hello tat hell o hell o 1 2 2 1 0 1 nil 2 3 nil 表测试----------------------------------------------------- table: 0D81EAD0 1 4 3 3 aasdas 1 : apple 2 : pear 3 : orange 4 : grape 函数测试----------------------------------------------------- function insert 3 4 function end function insert 8 9 function end 字符串测试----------------------------------------------------- a 这个是多行字符串测试 哈哈 ab 流程控制测试----------------------------------------------------- 1 4 a 大于 20 a 的值为 : 100 没有匹配 a 的值 a 的真实值为: 100 循环测试----------------------------------------------------- a 的值为: 10 a 的值为: 11 a 的值为: 12 a 的值为: 13 a 的值为: 14 0 2 4 6 1+++Sunday 2+++Monday 3+++Tuesday 4+++Wednesday 5+++Thursday 6+++Friday 7+++Saturday 面向对象测试----------------------------------------------------- a.test table: 0D81BB50 4 6 b:test 4 6 nil b:test table: 0D81B858 4 6 table: 0D81BC90 test1 blake nil b addr is table: 0D81C7A8 base:test table: 0D81C7A8 base:test table: 0D81C820 base:test table: 0D81CAC8 base:test table: 0D81CAC8 继承,重载 测试----------------------------------------------------- p = ==== table: 0D81CC08 man:test_man table: 0D81CC08 person:test table: 0D81CC08 man:get_age table: 0D81CC08
Lua学习之一环境搭建:https://blog.csdn.net/cmqwan/article/details/80742135
Lua学习之二基本类型:https://blog.csdn.net/cmqwan/article/details/80742990
Lua学习之三流程控制:https://blog.csdn.net/cmqwan/article/details/80749169
Lua学习之四循环 :https://blog.csdn.net/cmqwan/article/details/80749241
Lua学习之五面向对象:https://blog.csdn.net/cmqwan/article/details/80749348
Lua学习之六模块 :https://blog.csdn.net/cmqwan/article/details/80752806
Lua学习之七源码 :https://blog.csdn.net/cmqwan/article/details/80752873