Lua笔记
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??? ? 函数: ???????? --无参数无返回值函数 ? --参数的默认值 --不定参数 ? ? 运算符 1.??????算术运算符 + - * / % ^ ? a=7 ? ? ? 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? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |