加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua笔记

发布时间:2020-12-14 22:00:11 所属栏目:大数据 来源:网络整理
导读:Lua中的数据类型: ???????? Boolean ???????? Number ???????? String ???????? Function ? Print(type(“Hello world”))? àstring Print(type(10*4.2))? ànumber Print(type(print))? àfunction Print(type(type))? àfunction Print(type(nil))? ànil

Lua中的数据类型:

???????? Boolean

???????? Number

???????? String

???????? Function

?

Print(type(“Hello world”))? àstring

Print(type(10*4.2))? ànumber

Print(type(print))? àfunction

Print(type(type))? àfunction

Print(type(nil))? ànil

Print(type(true))? àboolean

?

类型转换

A=”3”

Print(a+5)?à8

Print(a..5)?à35???

?

函数:

???????? --无参数无返回值函数
function funa()
??? print("funa")
end

--有参数无返回值函数
function funb(a,b)
??? print(a+b)
end

--有参数有返回值函数
function func(a,b)
??? return a*b
end

?

--参数的默认值
function fund(a,b,c)
??? a=a or 3
??? b=b or 4
??? c=c or 9

??? print(a)
? ??print(b)
??? print(c)
end

--不定参数
function fune(...)
??? local a,c=...
??? print(a)
??? print(b)
??? print(c)
??? return select("#",...)--返回参数个数
end

function funf(...)
??? for k,v in ipairs({...})
??????? do print(k,v)
end

?

?

运算符

1.??????算术运算符

+ - * / % ^

?

a=7
b=2
c=math.floor(a/b)--向下取整
d=math.ceil(a/b)--向上取整
e=math.round(a/b)--四舍五入

?

?

?

2.??????关系运算符(>,<,==,~=,>=,<=)

3.??????逻辑运算符(and,or,not)

4.??????三目运算符()

O= (a>b) and a or b?? –>o=a>b? a:b

5.??????连接运算符(..)

a..b

6. 长度运算符(#)

S=”hello”

Print(#s)

?

S={1,26,59,45,48}—注意nil ?

Print(#s)

?

赋值语句

1.

A=”hello”..”world”

2.多值赋值

A,=10,2?? à? a=10,b=2

?

变量个数>值的个数?? 按变量个数补足nil

变量个数<值的个数?? 多余的值会被忽略

A,c=0,1

Print(a,c)?? à 0 1 nil

?

3.交换赋值

A,b=10,15

A,b=b,a

4.函数的多返回赋值

Functionfun(a,b)

???????? Return a+3,b*2

end

???????? a,b=fun(3,5)à a=6,b=10

?

局域变量和代码块

Local 本地变量

代码块

Do

???????? codes

end

?

分支语句

If a>b then

???????? Print(“a>b”)

Elseif a<b then

???????? Print(“a<b”)

Else

?Print(“a==b”)

?

循环语句

While…end 循环

Repeat…until循环相当于do…while

For…end循环

???????? Fori=1,10,2 do—从1到10,步长为2

?????????????????? Print(i)

???????? End

?

Lua中无continue,可以用repeat和if配套使用

?

Table(表)

包含数组,可变长数组,哈希表

1.??????初始化

数组下标方式

A={3,5,7}—下标从1开始

Len=#A

Len=table.maxn(A)—准确求A的长度

键字对方式

A={x=3,y=5,z=”hello”}

A.?????m=”mmm”

A[“n”]=”nnn”

Len=table.maxn(a)—len=0

Print(A.x)—

Print(A.n)

Print(“A[”y”]”..a[“y”])—

更一般的方式

B={[“+”]=”a”,[“-”]=”b”};

Print(b[“+”])

?

2.??????求表长度

Len=#A

Len=table.maxn(A)—准确求A的长度

?

3.??????二维数组

A={{1,2,3}{“aa”,”bb”,”cc”}}

A[3]={“张三”,”李四”,”王五”}

Len=table.maxn(A)—len=

InnerLen=table.maxn(A[1])

For i=1,len do

???????? Forj=1,InnerLen do

???????? Print(A[i][j])

???????? end

end

4.??????表遍历

For k,v in next,T do—k为下标,v为值,T为表,nil不打印

???????? Print(v)

End

?

For k,v in ipairs(m) do—ipairs为关键字,只能把数组中的非空数值打印出

???????? Print(“i=”..k)

???????? Print(“v=”..v)

End

?

For k,v in pairs(m) do—pairs为关键字,可以输出全部键值

Print(“i=”..k)

Print(“v=”..v)

End

5.??????数组元素的插入和删除

Table.insert(a,1,”AAA”)—在数组a的第一个元素位置插入AAA,其后元素往后顶

Table.remove(a,1)—删除数组a的第一个元素,后面元素往前移

插入删除不注明位置,默认在尾部,删除可以返回值

6.??????编译和加载

.Dofile(“aa.lua”)—装载并执行

.File=Loadfile(“aa.lua”)—装载并编译成中间码,但不马上运行

Local fun=assert(file)

.f=loadstring(“function aa(a,b) return a+b end”)—字符串当匿名函数使用

f()????

num=aa(2,3)

print(num)—输出5

.require—会搜索路径加载文件,常用加载库

Require(“app.scenes.aa”)

7.??????数组排序

a)????????冒泡排序

b)????????Table排序

Function tablesort()

???????? Table.sort(arr,function(a,b)return a<b end)—对数组arr排序

End

?

字符串操作

a)??????字符串查找(返回找到的起始位置)

_start,_end=string.find(s,’ah’)—注意:lua里面数组或者字符串的字符,其下标都是从1开始的

_start,’ah’,5)—从字符串的第五个位置开始查找

b)??????字符串替换

A=”one string”

B=string.gsub(a,”one”,”another”)—把A的字符串的one替换成another

?

c)??????多行字符串

Function manyline()

Page=[[

?????????? <html>

??????????????????? <title></title>

??????????????????? <body>

???????????????????????????? Hello,world

??????????????????? <body>

?????????? </html>

]]???????

end

d)??????字符串拼接

..

e)??????转换字符串

字符串会在string类型和number类型间自由转换

f)???????字符串倒序

S=”hello”

S=string.reverse(s)

?

???????? 随机数

?????????????????? Math.randomseed(xx)—添加种子数

Math.random([n[,m]])—提取随机数,取n到m间的随机数

?

Function getRand(a,b)—伪随机数

???????? Math.randomseed(1)—可以使用os.time()获取 当前系统时间,使种子数不同

???????? For i=0,10 do

?????????????????? Num=math.random()—0—1间随机取值

???????? end?

end

?

mytime=os.time()

mytime=string.reverse(mytime)

math.randomseed(mytime)

math.random(1,10)

?

Math库

???????? Math.pi

???????? Math.abs(-15)=15—取绝对值

???????? Math.ceil(5.8)=6—向上取整

???????? Math.floor(5.5)=5—向下取整

???????? Math.round(5.5)=6—四舍五入

???????? Math.mod(14,5)=4—取模

???????? Math.max()—取最大值

???????? Math.min()

???????? Math.rad(180)=3.14159265358—取弧度

???????? Math.deg(math.pi)=180—取角度值

???????? Math.power()—平方

???????? Math.sqrt()—开方

???????? math.atan2(y,x)—得到角弧度值

?

文件操作

???????? File,msg=io.opern(“iter.lua”,”r”)—r:read,w:write删除重新写,a:add,r+,w+,a+

???????? File:write(“helloworld”)

????????

???????? File:read(“*line”)—读取一行,*all读取所有

?

例外处理

???????? FuctionerrorFun()

???????? S=”5”

???????? Ifnot tonumber(s) then

?????????????????? Print(“不是数字”)

???????? Elseprint(“是数字”)

???????? End

End

?

Function exceptionFun(str)

???????? If(str~=”dd”)then

?????????????????? Error(“这不是我要的字符”)

???????? End

???????? Return“这是我要的字符”

End

?

S,err=pcall(exceptionFun,”rr”)—pcall执行,返回值交给err,

?

协同程序

???????? 协同程序就和线程差不多,但是又有比较明显的区别。

???????? 协同程序和线程都是在任意时刻都只能执行一个,但概念不一样。

???????? 一个协同程序在运行的时候,其他协同程序是无法获得执行的机会的,只有正在运行的协同程序主动挂起时,其他协同程序才有机会执行。

???????? 而对于线程而言,即使不主动休眠,也很有可能因为轮片时间到达而把执行机会让给其他线程。

???????? FunctioncorutineFun()—coroutine协同程序

?????????????????? Localco= coroutine.creat(function(a,b)—传入参数的协同,但是参数只能初始化传入的有效

???????? For i=1,10 do

???????? ???????? Print(a+b)

?????????????????? Coroutine.yield()—挂起

???????? End

end?

)

Return co

???????? end

?

???????? coroutine.resume(co,3,5)—调用协同线程

???????? print(coroutine.status(co,6,9))—输出协同状态

????????

?

闭包

???????? 闭包是函数中的函数,可以包含父函数的局部变量的代码块,可以让这些局部变量的值始终保持在内存中。

???????? 它的最大的用处有两个,一个是可以读取函数内部的变量,另一个是让这些变量的值始终保持在内存中。

???????? Functionfunc(a)

?????????????????? Localii=a

?????????????????? Functionff()—闭包

??????????????????????????? ii=ii+1???????

??????????????????????????? print(ii)

?????????????????? End

???????? Returnff

???????? End

?

???????? --调用

???????? Localfun=func()

???????? Fun()

?

面向对象

???????? Tolua++是一个三方的软件包,可以为lua提供面向对象的方法

???????? 封装

?????????????????? LocalUser= class(“User”)

??????????????????????????? User.id=1

??????????????????????????? User.name=”Shiwazone”

??????????????????????????? User.age=20

?

??????????????????????????? FunctionUser:ctor()

???????????????????????????????????? Print(“Userconstruction!”)

??????????????????????????? End

?

???????? ?????????????????? Function User:ctor(name)---lua不支持重载,默认使用下最后一个同名的函数

???????????????????????????????????? User.name=name???

???????????????????????????????????? Print(“Userconstruction!”)

??????????????????????????? End

?

??????????????????????????? FunctionUser:fun()

???????????????????????????????????? Print(“User’sfun”)

??????????????????????????? End

?

??????????????????????????? FunctionUser:SetID(id)

???????????????????????????????????? Self.id=id—使用对象的数据

--User.id=id-- User.id为静态变量,其值被所有对象使用

??????????????????????????? End

?

???????? FunctionUser:GetID(id)

???????????????????????????????????? --ReturnUser:id

???????????????????????????????????? Returnself:id

??????????????????????????? end

?

?????????????????? ReturnUser

?

?????????????????? LocalclassUser=require(“…User”)

??????????????????

?????????????????? Localuser=classUser.new()

?????????????????? print(user.name)????? ---Shiwazone???

?????????????????? user.name=”Tingmao”

?????????????????? print(user.name)????? ???????? --Tingmao

?

?????????????????? user:setID(23)—用冒号访问表示调用自己的成员函数,用点访问相当于调用静态函数

?????????????????? print(user:getID())

?

???????? ?

????????

继承(单)

???????? LocalUser=require(…User)

???????? LocalTeacher=class(“Teacher”,User)—继承User

???????? ???????? Function Teacher:ctor()

??????????????????????????? Self.Super:ctor()—调用父类构造函数

??????????????????????????? Print(“Teacherconstruction”)

?????????????????? end

???????? ReturnTeacher

?

Local classTeacher=require(“…Teacher”)

?

?

Lua Table 知识点

???????? Localarray={1,4,6}

???????? Print(#array)---6

???????? Print(table.maxn(array))—6

?

???????? Array[7]=7

???????? Print(#array)---7

???????? Print(table.maxn(array))—7

?

???????? Array[9]=9

???????? Print(#array)---7

???????? Print(table.maxn(array))—9

?

???????? Array={}

???????? Array[1]=2

???????? Array[“1”]=2

???????? Print(#array,array[1],array[“1”])—11 2

Account = {balance = 12}

Function?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读