抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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

print(1<<4)
----------
[13:43:56] 16

字符串

可以用单引号,支持转义字符

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