下载 macos使用homebrew下载brewinstalllua其它下载方式下载地址(sourceforge。net)查看lua是否安装成功luavhelloworld!usrbinenvluaprint(HelloWorld!)运行lua。hello。lua或者也可以像bash脚本一样chmodxhello。lua。hello。lua注释单行注释以两个减号开始多行注释 多行注释以〔〔开头,以〕〕结尾〔〔〕〕type()函数 使用type()函数可以判断变量或者值的类型print(type(true))booleanprint(type(nil))nilnumber Lua默认只有一种number类型double(双精度)类型print(10)print(0。3)print(2e10)string使用localstr1str1使用localstr2str2〔〔〕〕 使用〔〔〕〕跨行表示多个字符串localhtml〔〔htmlheadheadbody简单编程bodyhtml〕〕print(html)字符串连接(。。)print(a。。b)abprint(157。。428)157428字符串长度()print(string)6tablelocaltable{}迭代table 默认的初始索引会从1开始localarray{apple,pear,orange,grape}print(array〔1〕)applefork,vinpairs(array)doprint(k。。:。。v)end1:apple2:pear3:orange4:grape指定键localarray{}array。oneapplearray〔two〕peachprint(array。one)appleprint(array。two)peach变量默认值 变量的默认值均是nil!usrbinenvluaprint(b)nil全局和局部变量 Lua中的变量全是全局变量,那怕是语句块或是函数里,除非用local显式声明为局部变量!usrbinenvluafunctionmain()localb12a23endmain()print(a)23print(b)nil赋值ahello。。world改变变量t。nt。n1改变table给多个变量赋值a,b10,2aa10;b20交换变量localx,y1,3x,yy,xprint(x,y)3,1localtab{}tab。one2tab。two1tab〔one〕,tab〔two〕tab。two,tab。oneprint(tab。one,tab。two)12赋值个数不一致如果变量个数大于值的个数,按变量个数补足nila,b,c1,3print(a,b,c)13nil如果变量个数小于值的个数,多余的值会被忽略a1locala,ba,a1,a2print(a,b)12运算符 加法 减法 乘法 除法 取余,求出除法的余数 乘幂,计算次方 负号,取负值locala,b4,3print(ab)7print(ab)1print(ab)1。3333333333333print(ab)12print(ab)1print(ab)64。0类型转换在算术运算中,string类型会尝试自动转换为number时locala,b,cstr,1,2print(ab)errorprint(bc)3number类型使用。。会自动转换为stringlocala,b1,2print(type(a。。b))其它方式的转换print(type(tostring(12)))stringprint(type(tonumber(12)))number条件语句运算符关系运算符 符号 含义 等于 不等于 大于 小于 大于等于 小于等于locala,b4,3print(ab)falseprint(ab)falseprint(ab)falseprint(ab)trueprint(ab)trueprint(ab)true逻辑运算符 符号 含义 and 逻辑与 or 逻辑或操作符 not 逻辑非操作符locala,btrue,falseprint(aandb)falseprint(aandnotb)trueprint(aorb)truewhile循环localnum1while(num5)doprint(num的值为:,num)numnum1endif语句if(0)thenprint(0为true)endif。。elseif()。。elselocalage27;if(age18)thenprint(age小于18)elseif(age25)thenprint(age小于25)elseif(age30)thenprint(age小于30)elseprint(age大于30)endprint(age的值为:,age) 注意:Lua中0为true,但是Lua中的nil可以当作falsefor循环fori10,1,1doprint(i)endlua中的for循环从参数1变化到参数2,每次变化以参数3为步长递增i,并执行一次表达式参数三,是可选的,如果不指定,默认是1参数二只会在一开始求值,其后不会再进行运算localffunction(x)print(inf(x))returnx2endfori1,f(5)doprint(i)endrepeat。。。until循环localnum11repeatprint(num的值为:,num)numnum1until(num10)num的值为:11 repeat。。。until循环的条件语句在当前循环结束后判断breaklocalnum11repeatprint(num的值为:,num)numnum1if(num15)thenbreakenduntil(num20)函数初始化 像变量一样,如果加上local那么就是局部函数localfunctionmain()print(这是一个局部函数)end 你也可以将函数赋值给一个变量localmainfunction()print(这是一个局部函数)end返回值localfunctionmin(a,b)if(ab)thenreturnaelsereturnbendendprint(min(1,2))参数localpfunction(res)print(打印自己的风格,res)endlocalfunctionmain(a,b,p)p(ab)endmain(1,2,p)多个返回值localfunctionmin(a)localsum0localfactorial1fori,vinpairs(a)dosumsumvfactorialfactorialvendreturnsum,factorialendlocala,bmin({1,2,3,4})print(a,b)可变参数(。。。)localfunctionaverage(。。。)localresult0localarg{。。。}fori,vinipairs(arg)doresultresultvendreturnresultargendprint(平均值为,average(1,3,5,7,9,11))字符串字符串方法全部转换为大写string。upper(str)STR全部转换为小写string。lower(STR)str指定替换的字符串个数,最后一个参数可选,默认是全部替换string。gsub(aaaa,a,b,3)bbba3string。gsub(Todayis29012019,dddddddd,goodday。)Todayisagoodday。1查找第一个匹配的字符串,第三个参数可以提供开始查找的位置,默认从1开始如果未找到,则返回nilstring。find(referference,fer)35string。find(Todayis29012021,dddddddd)1019字符串反转string。reverse(fw)wf格式化字符串string。format(value:c,1)value:a转换字符并拼接string。char(97,98,99,100)abcd将字符转化为整数值。int用来指定某个字符,默认第一个字符string。byte(ABCD,4)68计算字符串长度string。len(abc)3返回字符串的n个拷贝string。rep(fw,n)fwfw剪切字符串,第三个参数可选,默认是字符串长度string。sub(referference,5,6)rf正则匹配 a 与任何字母配对 c 与任何控制符配对(例如) d 与任何数字配对 l 与任何小写字母配对 p 与任何标点(punctuation)配对 s 与空白字符配对 u 与任何大写字母配对 w 与任何字母数字配对 x 与任何十六进制数配对 z 与任何代表0的字符配对match 第三个参数可选,默认从1开始。如果没有捕获组返回整个字符串,匹配失败返回nilstring。match(Ihave2questionsforyou。,(d)(a))2questionsgmatch 返回一个迭代器函数,每次调用迭代器函数,如果参数pattern描述的字符串没有找到,迭代函数返回nilforworldinstring。gmatch(Ihave2questionsforyou。,a)doprint(world)endIhavequestionsforyou数学方法常用方法一个比任何数字都大的浮点数math。huge最小值的整数math。minintegerlocalamath。abs(1)1返回不小于该数到最小整数localbmath。ceil(1。2)2返回不大于该数到最大整数localcmath。floor(1。2)1取余localdmath。fmod(9。9,9)0。9返回最大值localgmath。max(1,2,3)3返回最小值localhmath。min(1,2,3)1返回参数的平方根localrmath。sqrt(3)9工具方法返回数字的类型,locallmath。type(1。2)floatlocalmmath。type(3)integerlocalnmath。type()nil返回以指定底底对数localemath。log(4,2)2返回以e为底的自然对数localfmath。exp(2)7。3890560989307返回〔0,1)区间内一致分布的浮点伪随机数math。random()返回〔1,n〕区间内一致分布的整数伪随机数math。random(10)返回〔n,m〕区间内一致分布的整数伪随机数math。random(10,100)无符号整数比较,参数一小于参数二则返回true,否则返回falselocalomath。ult(1,10)如果参数可以转换为一个整数,则返回该整数,否则返回nillocalpmath。tointeger(3)3localqmath。tointeger(0。32)nil返回整数和小数部分locali,jmath。modf(3。14)30。14其它方法圆周率math。pi3。1415926535898正弦方法(以下皆是以弧度表示)math。sin(math。pi2)1。0余弦方法math。cos(math。pi)1。0正切方法math。tan(math。pi4)1。0反正弦方法(以下皆是以弧度表示)math。acos(1。0)0。0反余弦方法math。acos(1。0)1。5707963267949反正弦方法math。atan(1。0)0。78539816339745角度转换为弧度math。rad(90)1。5707963267949弧度转换为角度math。deg(math。pi)180。0table初始化数组 初始化一个空数组localarray{} 默认的数组索引从1开始localarray{a,b,c,d}array〔5〕efori1,5doprint(array〔i〕)end多维数组localarray{{a,b,c},{d,e,f}}fori1,arraydoforj1,array〔i〕doprint(array〔i〕〔j〕)endend初始化tablelocaltable{}table。namefwtable。age18table〔sex〕boy获取table的长度print(table)3如果想要删除一个table,那么可以使用nil赋值tablenilprint(table)table方法用于连接table中指定的元素table。concat(table〔,sep〔,start〔,end〕〕〕)locala{apple,orange,peach}print(table。concat(a,,2,3))orangepeach用于向指定闻之插入元素。默认数组末尾table。insert(table,〔pos,〕value)locala{apple,orange,peach}table。insert(a,1,pear)print(a〔1〕)peartable。move(a1,f,e,t〔,a2〕)表a1,a1下标开始位置f,a1下标结束位置e,t选择移动到的开始位置(如果没有a2,默认a1的下标)localarray{a,b,c}fori,vinpairs(table。move(array,1,3,2))doprint(v)endaabctable。sort(table〔,comp〕)排序,默认是升序localarray{a,c,b}localffunction(a,b)returnstring。byte(a)string。byte(b)0endtable。sort(array,f)fori,vinpairs(array)doprint(v)endcba迭代器无状态的迭代器functionsquare(d,n)ifndthennn1returnn,nnendendfori,ninsquare,5,0doprint(i,n)endfor循环迭代器fori,ninpairs({1,2,3,4})doprint(i,n)end模块定义模块a。lualocalmod{}mod。coolthisisamodfunctionmod。test()print(thisisafunction)endreturnmod导入模块 一般我们可以直接使用require导入b。lualocalmodrequire(a)使用pcall确保require函数导入成功,失败则返回一个false状态localstatus,modpcall(require,a)ifnotstatusthenreturnendmod。test()print(mod。cool)私有函数localmod{}localfunctionprivate()print(private)endfunctionmod。public()private()endreturnmod 官网lua。org