网站商城网络整合营销,江西宜春市建设局网站,咸宁做网站,免费域名申请平台目录
变量篇
算数运算符
条件分支语句与循环语句
函数
表 Table
全局变量与本地变量
协程
元表
面向对象#xff08;封装#xff0c;继承#xff0c;多态#xff09;
常用自带库
垃圾回收 变量篇
print(hello)
print(lua)
--注释
--[[…目录
变量篇
算数运算符
条件分支语句与循环语句
函数
表 Table
全局变量与本地变量
协程
元表
面向对象封装继承多态
常用自带库
垃圾回收 变量篇
print(hello)
print(lua)
--注释
--[[多行注释1
]]--[[多行注释2
]]----[[多行注释3
--]]--变量
a5
bnil
print(a)--多重赋值
aa,bb1,2
aaa,bbb,c1,2
print(aaa,bbb,c)--多变量赋值
a,b,c 1,2
print(c)--不够会自动为空多了会省略 --数值型
q0x11
print(q)
print(type(q))--string
xajn8uah
yjkHJUb90
xxjbs\nhk
print(x,y,xx)
yyx..y--拼接
print(yy)
print(string.format(我今年%d岁,10))print(\n)
tonumtonumber(10)
tostrtostring(10)
print(string.upper(y))
print(string.lower(yy))
print(string.reverse(xx))
print(string.find(yy,HJ))
print(string.sub(yy,5,9))
print(string.rep(y,4))
print(string.gsub(yy,j,xxx))print(\n)
sstring.char(0x45)
s1string.byte(y,2)
print(#x)
print(tonum,tostr,s,s1)ss[[w
ky
duohang
shuchu
]]
print(ss)
算数运算符
--算数运算符
-- 有-*/%
--没有自增自减 --
--没有复合运算符
print (12)
a3
b4
print(a*b,a/b)
print(154.24)
print(25.2*5)
print(45%7)
print(幂运算..2^5)--条件运算符
-- ~
print(31)
print(28)
print(2~7)
print(77)
print(\n)--逻辑运算符,满足短路第一个是假的则就是假
-- ||
-- and or
print(true or false)
print(true and false)
print(false and print(555))
print(not true)
--LUA不支持位运算符不支持三目运算符--and or
--逻辑与逻辑或
--不仅可以连接bool类型任何类型都可以连接
--在lua中只有nil与false为假
print(1 and 2)
print(false and 2)print(false or 3)
print(4 or 77)
print(nil or false)x5
y1
local res(xy)and x or y
print(res)
条件分支语句与循环语句
--条件分支语句if 110 thenprint(110)
elseprint(no)
endif 810 thenprint(810)
elseif 810 thenprint(810)
end--循环语句
--for
--11111
for i10,15 doprint(i)
end--22222
for i1,10,2 doprint(i)
end--while
local n10
while n1 donn-1print(n)
end--do while
num0
repeatprint(num)numnum1
until num5 --结束条件
函数
--functionfunction function_name( ... )-- body
endafunction()
end--无参数无返回
function F1()print(F1)
end
F1()F2function ( )-- bodyprint(F2)
end
F2()--有参数无返回
function F3(a)print(a)
end
F3(1)--可以穿任意参数
F3(1,8,5)--不会报错自动丢弃--有返回
function F4(a)return a,444,false
end
tempF4(4587)
print(temp)
--多返回值时前面申明多个变量来接取
t1,t2,t3F4(9)
print(t1,t2,t3)--函数的类型
print(type(F4))--函数的重载
--LUA中不支持函数重载,默认调用最后一个申明的函数--变长参数
function F7( ... )--变长参数使用 用一个表存起来 再用arg{...}for i1,#arg doprint(arg[i])end
endF7(1,5,444,8,7,true)--函数的嵌套
function F8( ... )F9function ()print(nyx)endreturn F9
endttF8()
F9()--LUA中闭包考点
function FF( x )--改变了传入参数的生命周期return function ( y )return xyend
endF10FF(10)
print(F10(5))--函数多返回值
function test( )-- bodyreturn 11,34,25,3
enda,b,ctest()
print(a)
print(b)
print(c)表 Table
--表table所有复杂类型都是表--数组
a{1,5,222,nujs,true,8787,nil}
--索引从1开始
print(a[5])
--#是通用的获取长度的关键字
print(#a)
b{45,sjb,nil,4}
print(#b) --高版本中不会因为中间存在nil而是表的长度被截断--二维数组
aa{{5,7,55},{5,775,1}}
print(aa[1][3])--数组的遍历
--一维
for i1,#a doprint(a[i])
endfor i1,#b doprint(b[i])
end
--二维
for i1,#aa dobaa[i]for j1,#b doprint(b[j])end
end--自定义索引
bb{[0]n,2,3,[-1]4,5}
print(bb[0])
print(#bb)--为2 3 5
print(bb[-1])c{[1]1,[2]2,[6]7,[11]9}--比较特别的注意
print(#c)--字典
--字典的申明
a{[name]nyx,[age]18,[1]5}
print(a[name])
print(a[age])
print(a[1])
--可以用类似.成员变量的形式得到值
print(a.name)
--但是数字不可以.
--print(a.1)
--修改
a[name]wwww
print(a.name)
--新增
a[sex]female
print(a.sex)
--删除
a[sex]nil
print(a.sex)
print(遍历)--模拟字典遍历只能用pairs
for i,k in pairs(a) doprint(i.._..k)
end
--类和结构体
--lua中默认没有面向对象需要自己实现
--封装 成员变量成员函数。。。。。。
Student{age11,sextrue,set4,Upfunction (age)--这个age与上面的不是同一个是一个全局变量除非写Student.ageprint(age.age)print(vgjvv)end,Learnfunction ()-- bodyprint(哈哈哈哈)end
}
--申明表过后在表外去申明表有的变量和方法
Student.nametls
Student.Speakfunction ()print(speak)
endprint(Student.set)
Student.Up(Student)
Student.Learn()--lua中.与:的区别
Student.Speak()
--:时会默认把第一个参数传入方法中
Student:Up()--函数的第三种声明方式
function Student:Speak2()--lua中 有一个关键字 self 表示默认传入的第一个参数print(self.name..11shuohua)
endStudent:Speak2()--表的公共操作
t1{{age1,namennn},{age77,namewww}}
t2{namethd,sextrue}--插入
print(#t1)
table.insert(t1,t2);
print(#t1)
print(t1[1])
print(t1[2])
print(t1[3])
print(t1[1].name)--删除
--remove 传表会移除最后一个内容
table.remove(t1)
print(#t1)
print(t1[1].name)
--remove 传两个参数第一个是表第二个是索引
table.remove(t1,2)
print(#t1)t2{5,8,nil,22,bbb,4}
print(#t2..--t2)--排序
t3{5,8,42,22,1,4}
table.sort(t3)
for i,v in pairs(t3) doprint(v)
end
--逆序
table.sort( t3, function(a,b)if ab thenreturn trueend
end)
for _,v in pairs(t3) doprint(v)
end--拼接
tb{155,87,h,888745,5544}
strtable.concat(tb,。)--返回的是字符串对表中元素有要求
print(str)
--迭代器
--主要是用来遍历表的
a{[0]1,2,[-1]5,nil,444,8}--ipairs,从1开始遍历
for i,k in ipairs(a) doprint(键值对..i.._..k)
endprint(\n)
--pairs遍历,可以找到所有的键的值
for i,v in pairs(a) doprint(键值对..i.._..v)
end
全局变量与本地变量 --全局变量与本地变量
--全局变量
a1
b124--局部变量
for i1,2 dolocal cxx
end
print(c)
--多脚本执行
--关键字 require(脚本名)或者单引号‘’
require(test)
print(testa)
print(aa)--脚本卸载
require(test)--加载一次后不会再执行
--package.loaded[脚本名],为true说明已经被执行过
print(package.loaded[test])
--卸载已经执行过的脚本
package.loaded[test]nil
print(package.loaded[test])
local rarequire(test)--可以接收return出去的本地变量
print(ra)--大G表
--_G(是一个特殊的table,保存所有的全局变量)
for k,v in pairs(_G) do--print(k,v)
end
协程
-----------------------------协程协同程序---------------------------
----------------------创建(create创建与function函数创建)--------------------
--coroutine.create()
funfunction ( )-- bodyprint(13)
end
cocoroutine.create(fun)
--协程的本质是一个线程对象
print(co)
print(type(co))--函数创建返回为函数
co2coroutine.wrap(fun)
print(co2)
print(type(co2))----------------------------------运行--------------------------
--create创建方式的运行
coroutine.resume(co)--函数创建方式运行
co2()----------------------------------------挂起-------------------------fun2function()local i1while true doprint(i)ii1print(coroutine.status(co3))--协程挂起函数coroutine.yield()--其中可以带返回值coroutine.yield(i)协程的第一个返回值是返回有没有执行成功--coroutine.yield(i)end
endco3coroutine.create(fun2)
isT,tempicoroutine.resume(co3)
print(isT,tempi)
coroutine.resume(co3)--在lua中因为程序是从上到下执行一次 所有只有重启一次他才会继续执行
coroutine.resume(co3)
coroutine.resume(co3)co4coroutine.wrap(fun2)
--此方式的协程调用也可以有返回值但是没用默认的第一个返回值
co4()
co4()
co4()
co4()--与上面相同执行一次-----------------------------------状态------------------------------------------
--coroutine.statusd(协程对象)
--dead 结束
--suspended 暂停
--running 进行中
print(coroutine.status(co3))
print(coroutine.status(co))
--得到现在正在运行的协程编号(线程号)
print(coroutine.running())
元表
--------------------元表---------------------
--------------------元表的概念---------------------
--任何表变量都可以作为另一个表变量的元表
--任何变量都可以有自己的元表
--当对有元表的表执行操作时会执行元表中的内容
--------------------设置元表---------------------
t1{}
myt{}
--设置元表函数
setmetatable(myt,t1)--将第一个参数设置成第二个元表--------------------元表的操作---------------------
-----------------—__tostring
t2{__tostringfunction(i)return i.nameend
}
myt1{namenyx
}setmetatable(myt1,t2)--将第一个参数设置成第二个元表
print(myt1)--------------------------__call当第一个参数被当作一个函数来使用时会默认调用__call中的内容
--当希望穿参数时一定要默认第一个参数是调用者自己
t3{__tostringfunction(i)return i.nameend,__callfunction(a,b)print(a)print(b)print(love)end
}
myt2{namenyx
}setmetatable(myt2,t3)--将第一个参数设置成第二个元表
print(myt2)
--把子表当作函数使用就会调用元表的__call方法
myt2(5)-------------------------------------运算符重载
meta{--相当于运算符重载当子表使用运算符时会调用方法__addfunction(t1,t2)return tt.agett1.ageend,__subfunction(t1,t2)return tt.age-tt1.ageend,__mulfunction(t1,t2)return tt.age*tt1.ageend,__divfunction(t1,t2)return tt.age/tt1.ageend,__modfunction(t1,t2)return tt.age%tt1.ageend,__powfunction(t1,t2)return tt.age^tt1.ageend,__eqfunction(t1,t2)return tt.agett1.ageend,__ltfunction(t1,t2)return tt.agett1.ageend,__lefunction(t1,t2)return tt.agett1.ageend,
--lua中没有不等于与大于大于等于__concatfunction(t1,t2)return t1..t2end}
tt{age1}
setmetatable(tt,meta)
tt1{age2}print(tt..tt1)----------------------__index与__newindex-------------------------mm{age2
}
--将__index的赋值写在表外进行初始化
mm.__indexmm
ty{}
setmetatable(ty,mm)print(getmetatable(ty))--得到元表的方法
--__index当子表中ty找不到某个属性时会到元表中__index指定的表去找索引
print(ty.age)--————index查找可以层层向上
mmFa{sx5
}
mmFa.__indexmmFa
setmetatable(mm,mmFa)
print(mm.sx)--__newIndex 当赋值时如果赋值一个不存在的索引那么会把这个值附到newIndex所指的表中不会修改自己
ma{}
ma.__newIndex{}
mt{}
setmetatable(mt,ma)
mt.grade99
print(mt.grade)
print(ma.__newIndex.grade)
面向对象封装继承多态
-----------------------------面向对象--------------------------
-----------------------------封装--------------------
--面向对象类其实都是基于table来实现Object{}
Object.id1
function Object:Test()print(self.id)end--冒号 会将自动调用这个函数的对象作为第一个参数传入的写法
function Object:new( )-- self代表我们默认传入的第一个参数--对象就是变量返回一个新的变量返回出去的内容本质上就是表对象local obj{}--元表知识__index 当找自己的变量找不到时就会去找元表当中__index指向的内容self.__indexselfsetmetatable(obj,self)return obj
end
local myObjObject:new()
print(myObj)
print(myObj.id)
myObj:Test()
--想当于对空表中申明一个新的属性叫id
myObj.id2
print(Object.id)
myObj:Test()------------------------------------继承---------------------
--写一个用于继承的方法
function Object:subClass(classname)--_G知识点是总表所有声明的全局变量都以键值对的形式存在其中_G[classname]{}--写相关继承规则local obj_G[classname]self.__indexself--子类 定义一个base属性 base属性代表父类obj.baseselfsetmetatable(obj,self)
end
print(_G)
_G[a]1
print(a)Object:subClass(Person)
local p1Person:new()print(p1.id)------------------------------------多态-------------------------
print(------------------------------------------)
--相同行为不同表现
--相同方法不同执行逻辑就是多态
Object:subClass(GameObject)
GameObject.posX0
GameObject.posY0
function GameObject:Move()self.posXself.posX1self.posYself.posY1print(self.posX)print(self.posY)
endGameObject:subClass(Player)
function Player:Move()-- base.Move构建一个base保留父类的方法--这里的base指的是Gameobject类此方式调用相当于将基类表作为第一个参数传入方法--避免将基类表传入到方法中这样相当于公用一张表的属性--我们如果要执行父类逻辑我们不要直接冒号调用--要通过.调用然后传入第一个参数self.base.Move(self)
end
local P1Player:new()
P1:Move()
--目前这种写法不同对象使用的成员变量居然是相同的
local P2Player:new()
P2:Move()
常用自带库
-------------------lua的自带库----------------------------------------时间---------------------
--系统时间
print(os.time())
--自己传入参数得到时间
print(os.time({year2024,month12,day29}))--利用os.date(*t)
local nowtime os.date(*t)
print(nowtime)
for i,v in pairs(nowtime) doprint(i,v)
end
print(nowtime.hour)
-------------------数学运算---------------------
--math
--绝对值
print(math.abs(-23))
--弧度转角度
print(math.deg(math.pi))
--三角函数,传弧度
print(math.cos(math.pi))
--向下向上取整
print(math.floor(2.6))
print(math.ceil(5.2))--最大值与最小值
print(math.max(1,4))
print(math.min(4,1))--小数分为整数与小数俩部分
print(math.modf(2.4))--幂运算
print(math.pow(2,5))--随机数,先设置随机数种子
math.randomseed(os.time())
print(math.random(100))
print(math.random(100))--开方
print(math.sqrt(9))-------------------路径---------------------
--lua脚本加载路径
print(package.path)
垃圾回收
------------------------垃圾回收--------------------
--关键字 collectgarbage
--获取当前lua占用内存数 K字节用返回值*1024得到具体内存占用字节数
collectgarbage(count)test{id1,name222222}
print(collectgarbage(count))--lua中的机制与C#中的机制很类似解除羁绊则变为垃圾
testnil--进行垃圾回收看类似于GC
collectgarbage(collect)
print(collectgarbage(count))
--lua中其实有自动定时垃圾回收
--但是在Unity热更新开发中尽量不要用自动垃圾回收
文章转载自: http://www.morning.vibwp.cn.gov.cn.vibwp.cn http://www.morning.trqhd.cn.gov.cn.trqhd.cn http://www.morning.vehna.com.gov.cn.vehna.com http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.webife.com.gov.cn.webife.com http://www.morning.qsmdd.cn.gov.cn.qsmdd.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.jbfzx.cn.gov.cn.jbfzx.cn http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.tkchm.cn.gov.cn.tkchm.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.srkqs.cn.gov.cn.srkqs.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.rpstb.cn.gov.cn.rpstb.cn http://www.morning.ckwxs.cn.gov.cn.ckwxs.cn http://www.morning.zqcdl.cn.gov.cn.zqcdl.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.tkzqw.cn.gov.cn.tkzqw.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.dhmll.cn.gov.cn.dhmll.cn http://www.morning.grtwn.cn.gov.cn.grtwn.cn http://www.morning.xnpj.cn.gov.cn.xnpj.cn http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn http://www.morning.clhyj.cn.gov.cn.clhyj.cn http://www.morning.llqky.cn.gov.cn.llqky.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.gl-group.cn.gov.cn.gl-group.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.nftzn.cn.gov.cn.nftzn.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.bkxnp.cn.gov.cn.bkxnp.cn http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn http://www.morning.rqqmd.cn.gov.cn.rqqmd.cn http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.lqjpb.cn.gov.cn.lqjpb.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.qbfs.cn.gov.cn.qbfs.cn http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn http://www.morning.kmqms.cn.gov.cn.kmqms.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.zzjpy.cn.gov.cn.zzjpy.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.rwmp.cn.gov.cn.rwmp.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn http://www.morning.jbmsp.cn.gov.cn.jbmsp.cn http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn http://www.morning.cfcdr.cn.gov.cn.cfcdr.cn http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.knmby.cn.gov.cn.knmby.cn http://www.morning.zxqqx.cn.gov.cn.zxqqx.cn http://www.morning.yjxfj.cn.gov.cn.yjxfj.cn http://www.morning.kzyr.cn.gov.cn.kzyr.cn http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn http://www.morning.zzfjh.cn.gov.cn.zzfjh.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.fgxr.cn.gov.cn.fgxr.cn http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn