lua的注释符号用–
Lua测试链接:https://wiki.luatos.com/_static/luatos-emulator/lua.html
变量声明
直接a=1为全局声明,可在别的文件使用.
要想限制就在变量前加local,local a=1
多重赋值
a,b=1,233 print(a,b)
[13:32:39] 1 233
|
未声明变量为nil,类似null
a,b,c=1,233 print(a,b,c)
[13:34:56] 1 233 nil
|
数值型number
int char long float之类的统一叫做number
lua支持Ox开头十六进制表示
支持科学计数法
a=0x10 b=2e2 print(a,b)
[13:39:12] 16 200.0
|
运算符
支持运算符
支持加减乘除幂运算之类的运算符
a=0x6 b=2 print(a^b)
[13:41:52] 36.0
|
支持移位
0001左移四位1000
字符串
可以用单引号,支持转义字符
b="asd\ndddd" a='asdf' print(a) print(b)
[13:47:35] asdf [13:47:35] asd dddd
|
支持输出多行字符
c=[[qqqq\n 1 2 3
5
7777asdasd ]] print(c)
[13:49:17] qqqq\n 1 2 3
5
7777asdasd
|
字符串连接符号..
用加号连接会报错
a='111' b='bbbb' d=a+b print(d)
[13:51:26] [string "a='111'..."]:4: attempt to perform arithmetic on a string value (global 'b') ============ a='111' b='bbbb' c=a..b print(c)
[13:52:10] 111bbbb
|
数字转字符串tostring()
字符串转数字tonumber()
转换失败会打印nil
#
号获取字符串长度
n="csdfs" print(#n)
[14:02:04] 5
|
string.char()
string.char()可以将ASCII码值变成字符串
string.byte(a,b)可以将ASCII码值转十进制.a为字符串,b为下标
s=string.char(0x2e,0x2f,0x30,0x31,0x32) for i=1,#s do n=string.byte(s,i) print(n) end print(s)
[17:36:36] 46 [17:36:36] 47 [17:36:36] 48 [17:36:36] 49 [17:36:36] 50 [17:36:36] ./012
|
函数
两种定义方式
function f1( a ) print("第一个函数:"..a) end f2=function( a ) print("第2个函数:"..a) end f1(1) f2(2)
[14:06:25] 第一个函数:1 [14:06:25] 第2个函数:2
|
自定义return内容
这个print里a和c要输出的话都是nil
function f( a,b,c ) return b end print(f(a,"b",c))
[14:12:12] b
|
多个返回值可以配合多重赋值
function f( a,b,c ) return a,b,c end local i,j,k = f(a,"b",7) print(i,j,k)
[14:19:00] nil b 7
|
table
数字下标
a={"A",123,{},function()return 1; end} a[5]=555 for i,v in ipairs(a) do print(i,v) end print("第一个元素用下标1:"..a[1]) print(#a)
[15:44:03] 1 A [15:44:03] 2 123 [15:44:03] 3 table: 0x154 [15:44:03] 4 function: 0x155 [15:44:03] 5 555 [15:44:03] 第一个元素用下标1:A [15:44:03] 5
|
插入元素
table.insert(a,3,"新插入")
,在table a中的索引3前插入字符串”新插入”,
table.remove()
与insert同理
a={"A",123,{},function() end} a[5]=555
function p() for i,v in ipairs(a) do print(i,v) end print("--------------"); end
print("第一个元素用下标1:"..a[1]) print("count:"..#a) p()
table.insert(a,3,"新插入") print("count:"..#a) p()
================================ 第一个元素用下标1:A [15:53:42] count:5 [15:53:42] 1 A [15:53:42] 2 123 [15:53:42] 3 table: 0x155 [15:53:42] 4 function: 0x156 [15:53:42] 5 555 [15:53:42] [15:53:42] count:6 [15:53:42] 1 A [15:53:42] 2 123 [15:53:42] 3 新插入 [15:53:42] 4 table: 0x155 [15:53:42] 5 function: 0x156 [15:53:42] 6 555 [15:53:42]
|
字符串作为下标
有点像字典,也是分为键值对,但是这个调用真的非常自由
符合规范的key可以用t.a这种形式直接调用
不符合规范的可以在方括号中调用:[“乱写的下标”]
定义的时候也必须加方括号.
t={ a=1, b="bb", c=function() end, d={}, ["乱写的下标"]="啊啊啊" } print(t["a"]) print(t.a) print(t["乱写的下标"])
[16:03:51] 1 [16:03:51] 1 [16:03:51] 啊啊啊
|
t={ a=1, b="bb", c=function() end, d={}, ["乱写的下标"]="乱写的下标的内容" } print(t["a"]) print(t.a)
print(t["乱写的下标"])
t.f="新增f" print(t.f)
t.a="修改后的a" print(t.a)
[16:10:32] 1 [16:10:32] 1 [16:10:32] 乱写的下标的内容 [16:10:32] 新增f [16:10:32] 修改后的a
|
全局表_G
所有的全局变量都存在**_G表**中
a=1 print(_G.a) print(_G.b)
[16:12:58] 1 [16:12:58] nil
|
table也属于_G,所以_G["table"]打印出来也是table,table的insert方法,打印出来可以看到是function类型
print(_G["table"]) print(_G["table"]["insert"])
[16:16:18] table: 0x10 [16:16:18] function: 0x155
|
真假
判断符号
lua中的不等于号是~=而不是!=
a=true b=false print(1>2) print(1<2) print(1>=2) print(1<=2) print(1==2) print(1~=2)
[16:22:12] false [16:22:12] true [16:22:12] false [16:22:12] true [16:22:12] false [16:22:12] true
|
与或非
a=true b=false print(a and b) print(a or b) print(not a)
[16:24:39] false [16:24:39] true [16:24:39] false
|
lua中只有false和nil为假,其他包括数字0都为真
与或非运算lua可以直接输出结果
a=0 b=nil print(a and b) print(a or b) print(not a)
[16:28:50] nil [16:28:50] 0 [16:28:50] false
|
两个正确参数and运算,输出右边的值;两个正确参数or运算,输出左边值;
两个错误参数or运算,输出右边的值;两个错误参数and运算,输出左边值;
一正一错进行and,输出错误值
一正一错进行or,输出正确值
print(1 and 0) print(1 or 0)
print(false or nil) print(false and nil)
[16:52:01] 0 [16:52:01] 1 [16:52:01] nil [16:52:01] false
|
print((2>1)and"正确"or"错误") print((2==1)and"正确"or"错误")
[16:44:45] 正确 [16:44:45] 错误
|
条件判断
if 1>2 then print("1>2") elseif 1<2 then print("1<2") else print("错误") end
[17:02:06] 1<2
|
循环
for循环
第三个参数是步长
for i=1,5 do print(i) end print("=================") for i=1,5,2 do print(i) end
[17:09:50] 1 [17:09:50] 2 [17:09:50] 3 [17:09:50] 4 [17:09:50] 5 [17:09:50] ================= [17:09:50] 1 [17:09:50] 3 [17:09:50] 5
|
如果i比结束数字大,则步长要为负数,例如-1
for i=10,5,-1 do print(i) end
[17:11:47] 10 [17:11:47] 9 [17:11:47] 8 [17:11:47] 7 [17:11:47] 6
|
循环途中更改i的值无效,但是可以通过break弹出
for i=10,5,-1 do print(i) if i==7 then break end end
[17:15:32] 10 [17:15:32] 9 [17:15:32] 8 [17:15:32] 7
|
while循环
lua不支持x--或者x-=1;只能使用x=x-1;
local x = 5 while x>1 do x=x-1 print(x) end
[17:18:20] 4 [17:18:20] 3 [17:18:20] 2 [17:18:20] 1
|