这里把所有的测试代码都放进来,有需要的拿吧
--[=[
多行注释
多行注释推荐使用 --[=[注释内容]\],
这样可以避免遇到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