Lua初级

109 阅读1分钟

学习笔记

环境配置

🕹️ 在线体验LuatOS - LuatOS 文档

浏览器直接使用编译器

变量

声明

变量声明,全局变量

a = 1
b = 2

局部变量声明

 local a = 1

nil

print(a)

a 未赋值,打印结果nil

多重赋值

多重赋值

a,b,c = 1,2,3
print(a,b,c)

打印1 2 3

a,b,c = 1,2
print(a,b,c)

打印1 2 nil

数值型

支持十六进制表示和科学计数法

a = 0x11
b = 2e10
print(a,b)

打印

17	20000000000.0

算数运算符

加减乘除

print(2^5)

左右移

print(1<<3)

打印8

字符串

可以单引号,也可以双引号

a = "asdf"
b = 'asdasfd0'
print(a,b)

中括号 [[ ]]

c = [[asdas
asd/asd
asdasd
asdasd
asdasd]]
print(c)

打印

asdas
asd/asd
asdasd
asdasd
asdasd

字符串连接

两个点

a = "asdf"
b = 'asdasfd0'
c = a..b
print(c)

数字和字符串转换

a = tostring(10)
b = tonumber("123")
print(a,b)

字符串转换为数字失败时,输出nil

查看字符串长度

#加字符串

b = "asdasdasd"
print(#b)

打印9

字符串ASCII 码转 字符串

s = string.char(0x30,0x31,0x32,0x33)
print(s)
--0123

取出字符

s = string.char(0x30,0x31,0x32,0x33)
n = string.byte(s,2)
print(n)
-- 49,查看ASCII表

函数

结构

function function_name( ... )
    -- body
end

--也可以

function_name = function( ... )
    -- body
end
function f(a,b)
print(a,b)
end

f(1,2)

返回值

--return
function f(a,b)
  return a,b
end

print(f(2,3))

table

table基础

类似数组,不过可以存放很多类型,且下标从1开始

a = {1,"asd",{},function() end}
print(a[1])
--类似数组,不过可以存放很多类型

赋值

a = {1,"asd",{},function() end}
a[5] = "qwe"
print(a[5])

获取长度

a = {1,"asd",{},function() end}
a[5] = "qwe"
print(#a)
--结果5

插入元素

a = {1,"asd",{},function() end}
a[5] = "qwe"
table.insert(a, "asd")
print(#a)
--结果6
a = {1,"asd",{},function() end}
a[5] = "qwe"
table.insert(a,2, "zxc")
print(#a)
print(a[2],a[3],a[4])
--6
-- zxc	asd	table: 0x154

移除元素

移除元素同时还能赋值

a = {1,"asd",{},function() end}
a[5] = "qwe"
table.insert(a,2, "zxc")
local s = table.remove(a,2)
print(s)
--zxc

table 字符串下标

带有下标,下标要写出来,且要用“”括起来

符合命名规范可以用小数点

a = {
    a =1,
    b = "123",
    c = function()

    end,
    d = 123123
}
print(a['a'])
--打印1
print(a.a)--小数点
print(a.b)

赋值

a = {
    a =1,
    ["aa"] = 123
}
a["aaa"] = "qwewqe"
print(a["aa"])
print(a.aaa)

_G

_G是一个表 table,所有的全局变量都在这里面

a = 1;--全局变量a,被放在_G里面
print(_G['a'])
--1

真假

a = true
b = false
print(1>2) -- false
print(1<2) --true
print(1>=2)-- false
print(1<=2)--true
print(1==2)-- false
print(1~=2)--true    不等于用~=
print(a and b)-- false
print(a or b)--true
print(not a)-- false

lua 中只有false 和 nil 代表假 其他代表真

0 也是真

同时and,or not 不一定返回true ,或false,也可以返回值

a = nil
b = 0
print(a and b)   -- nil
print(a or b)    -- 0
print( not b)	 -- true

类似三目运算符

a = nil
b = 0
print(b > 10 and "yes" or "no")
-- no

分支判断语句

if 1 > 10 then
    print("1>10")
elseif 1 < 10 then
    print("1<10")
elsexun
    print("no")
end

循环

for循环

for i=1,10 do
    print(i)
end
--打印1到10
for i=1,10,2 do
    print(i)
end
--步长为2 ,打印1 3 5 7 9
for i=10,1,-2 do
    print(i)
end
--倒叙,打印10 8 6 4 2	

for循环中不能改变 i 值

可以break

for i=10,1,-2 do
    print(i)
    if i == 4 then
     break
    end 
end
--打印  10 8 6 4

while循环

while 条件 do

end

local n = 10
while n > 5 do
    print(n)
    n = n -2
end
-- 打印10 8 6

while 里也可以用break

lua 不能用自减 如 a-- 不可以