200702:lua语法

    技术2022-07-11  85

    需要解决的问题

    lua的闭包lua的面向对象lua数组遍历

    VS Code调试lua

    下载lua+配置环境+Ctrl+F5

    遇到的问题

    有很多个a,b,c,但是却不冲突

    lua语法

    #!/usr/local/bin/lua print("Hello world!") print("www.shizukuu.com") --注释 --全局变量 b=10 print(b) --想删除一个全局变量,只需要将变量赋值为nil。 b=nil print(b) --Lua 动态类型语言/变量不要类型定义/只需要赋值/值可以存储在变量中,作为参数传递或结果返回 --8个基本类型 --nil、boolean、number、string、userdata、function、thread、table print(type("Hello world!")) print(type(10.4*3)) print(type(print)) print(type(type)) print(type(true)) print(type(nil)) print(type(type(X))) --Lua 变量:全局变量、局部变量、表中的域。 a=5 local b=5 function joke() c=5 local d=6 end joke() print(c,d) do local a=6 b=6 print(a,b); end print(a,b) --赋值 a,b=10,2 --交换变量值 --x,y=y,x --a[i],a[j]=a[j],a[i] a,b,c=0,1 print(a,b,c) a,b=a+1,b+1,b+2 print(a,b) a,b,c=0 print(a,b,c) --[ 0true ] if(0) then print("0为true") end --lua 循环 --while a=10 while(a<13) do print("a的值为:",a) a=a+1 end --for --只在循环开始前执行一次 function f(x) print("function") return x*2 end --意思是从110 for i=1,f(5) do print(i) end --泛型for循环 days={"Sunday","Monday","Tuesday","Wednesday"} for i,v in ipairs(days) do print(v) end --repeat until a=10 repeat print("a的值为:",a) a=a+1 until(a>13) --循环嵌套 --TODO: j=2 for i=2,10 do for j=2,(i/j),2 do if(not(i%j)) then break end if(j>(i/j))then print("i的值为:",i) end end end --lua 流程控制 --if a=10 if(a<20) then print("a小于20"); end print("a的值为:",a) --elseif a=100 if(a==10) then print("a的值为10") elseif(a==20) then print("a的值为20") else print("没有匹配a的值") end print("a的真实值为:",a) a=100 b=200 if(a==100) then if(b==200) then print("a的值为100,b的值为200") end end

    函数

    --函数 function max(num1,num2) if(num1>num2)then result=num1 else result=num2 end return result end print("两值比较最大值为",max(10,4)) print("两值比较最大值为",max(5,6)) myprint=function(param) print("这是打印函数 - ##",param,"##") end function add(num1,num2,functionPrint) result=num1+num2 functionPrint(result) end myprint(10) add(2,5,myprint) --多返回值 function maximum(a) local mi=1 local m=a[mi] for i,val in ipairs(a) do if val>m then mi=i m=val end end return m,mi end print(maximum({8,10,23,12,5})) --可变参数 --在函数参数列表中使用三点 ... 表示函数有可变的参数 function add(...) local s=0 for i,v in ipairs{...}do s=s+v end return s end print(add(3,4,5,6,7)) function average(...) result=0 local arg={...} for i,v in ipairs(arg) do result=result+v end print("总共传入"..#arg.."个数") return result/#arg end print("平均值为",average(10,5,3,4,5,6)) function average(...) result=0 local arg={...} for i,v in ipairs(arg) do result = result+v end print("总共传入"..select("#",...).."个数") return result/select("#",...) end print("平均值为",average(10,5,3,4,5,6))

    运算符

    --运算符 a=21 b=10 c=a+b print("Line 1-c 的值为",c) c=a-b print(c) c=a*b print(c) c=a/b print(c) c=a%b print(c) c=a^2 print(c) c=-a print(c) a=21 b=10 if(a==b) then print("a等于b") else print("a不等于b") end if(a~=b) then print("a不等于b") else print("a等于b") end

    逻辑运算符

    --逻辑运算符 a=false b=true if(a and b) then print("a and b - 条件为true") else print("a and b - 条件为false") end if(not(a and b)) then print("not(a and b) - 条件为true ") else print("not(a and b) - 条件为false ") end

    其他运算符

    -- .. # a="Hello " b="World" print("连接字符串a和b",a..b) print("b字符串长度 ",#b) print("字符串Test长度",#"Test") print("网址长度",#"www.baidu.com")

    转义字符

    字符串操作

    字符串截取
    --字符串截取 string.sub() --[[string.sub(s, i [, j]) s:要截取的字符串。 i:截取开始位置。 j:截取结束位置,默认为 -1,最后一个字符。 ]] local sourcestr = "prefix--runoobgoogletaobao--suffix" print("\n原始字符串",string.format("%q",sourcestr)) local first_sub=string.sub(sourcestr,4,15) print("\n第一次截取",string.format("%q",first_sub)) --截取最后10个 local third_sub = string.sub(sourcestr,-10) print("\n第三次截取",string.format("%q",third_sub))
    字符串大小写转换
    --字符串大小写转换 string1="Lua"; print(string.upper(string1)) print(string.lower(string1))
    字符串查找与反转
    --字符串查找与反转 string="Lua Tutorial" print(string.find(string,"Tutorial")) reversedString=string.reverse(string) print("新字符串为",reversedString)
    格式字符串

    --字符串格式化 --string.format() 函数生成具有特定格式的字符串 --函数的第一个参数是格式 , 之后是对应格式中每个代号的各种数据 string1="Lua" string2="Tutorial" number1=10 number2=20 print(string.format("基本格式化 %s %s",string1,string2)) date=2;month=1;year=2014 print(string.format("日期格式化 d/d/d",date,month,year)) print(string.format("%.4f",1/3))
    字符与整数相互转换
    --字符与整数相互转换 --string.byte --string.char print(string.byte("Lua")) print(string.byte("Lua",3)) print(string.byte("Lua",-1)) print(string.byte("Lua",2)) print(string.char(97))
    字符串长度
    --字符串长度 --string.len string2="Shizukuu" print("字符串长度",string.len(string2))
    字符串复制2次
    --字符串复制2次 repeatedString=string.rep(string2,2) print(repeatedString)

    Lua 数组

    数组从1开始 --Lua 数组 --一维数组 array={"Lua","Tutorial"} for i=0,2 do print(array[i]) end

    以负数为数组索引值
    --以负数为数组索引值 array={} for i=-2,2 do array[i]=i*2 end for i=-2,2 do print(array[i]) end
    多维数组
    array={} for i=1,3 do array[i]={} for j=1,3 do array[i][j]=i*j end end for i=1,3 do for j=1,3 do print(array[i][j]) end end
    Processed: 0.008, SQL: 9