Lua学习之七源码

这里把所有的测试代码都放进来,有需要的拿吧

--[=[
多行注释
多行注释推荐使用 --[=[注释内容]\],
这样可以避免遇到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

Lua学习之一环境搭建

Lua学习之二基本类型

Lua学习之三流程控制

Lua学习之四循环

Lua学习之五面向对象

Lua学习之六模块

Lua学习之七源码




猜你喜欢

转载自blog.csdn.net/cmqwan/article/details/80752873