lua语法学习笔记(速成版)

文章目录

使用环境

使用官方的浏览器测试网站进行代码测试。wiki.loatos.com


变量

创建变量

类似python,直接赋值即生成全局变量;

加关键字 local 变成 仅本文件使用变量;


数据类型

nul和number

未被声明(或叫创建)的值都是 nul,类似NULL。

number 数值型,支持16进制表示法和科学计数法。


字符串

单引号或者双引号括起表示字符串。

lua 复制代码
a = "asdf"
b = 'qwer'

支持转义字符。


使用两个方括号进行换行,但是括号里的转义字符不会进行转义处理。

lua 复制代码
c = [[
123
12345
12345/n1
12
]]
print(c)

->123
12345
12345/n1
12

用两个点 ... 作为连接符进行连接:

lua 复制代码
a = 'qwe'
b = 'asd'
c = a..b
print(c)

->qweasd

数字与字符串互相转换:

tonumber(),转换失败返回 nul

tostring()

lua 复制代码
c = tostring(10)
d = tonumber("abc")

lua字符串可以存放任何东西,类似字符串数组。

常用lua字符串存储二进制流,因为字符串的值一般不容易丢失和更改。

lua 复制代码
s = string.char(0x30,0x31,0x32,0x33)--ASCII码转字符串
n = string.byte(s,2)--提取某一位的值
print(n)
print(n)

->0123
49

获取字符串长度:

lua 复制代码
a = 'qwerf'
print(#a)

->5

多重赋值

lua 复制代码
a,b = 1,2
print(a,b)
->1 2

a,b,c = 0x11,2e3
print(a,b,c)
->17 2000 nul

运算符

加减乘除、乘幂、左移右移


函数

函数定义

lua 复制代码
function function_name( ... )
    -- body
end

function_name = function( ... )
    -- body
end

函数默认返回值是 nul。


函数使用

调用和C一样,返回值也可以用return来返回。

多个返回值可以配合多重赋值使用。

lua 复制代码
local i,j = f(a,b)

table 下标

数字下标

lua 复制代码
a = {1,'q',{123},function() end}
a[5] = 123
print(a[1])
print(#a)

->1 
5

类似数组,不过里面什么都能存。

提取与其他语言不同,第一位是1。

(其他语言一般第一位是0)

通过lua自带接口对table进行操作:

lua 复制代码
table.insert(a,2,'d')
print(a[2])
print(#a)

->d 6

local x = table.remove(a,2)
print(a[2])
print(x)
->p 
d

字符串下标

lua 复制代码
a = {
	a = 1,
	b = 'q',
	c = {},
	d = function() end,
	e = 123
	[":;"] = 1122
}
print(a["a"])
print(a.b)
print(a[":;"])
->1 
q 
1122

注意:字符串下标的提取需要用双引号括起下标(代码中的方法一)。

方法二的前提是该下标符合变量命名规范。

方法三,如果不符合命名规范,也是可以用方法一来,但是在定义的时候就需要用 框+双引号 来定义。


lua 复制代码
a["abc"] = "qwert"
print(a["abc"])

->qwert

全局下标 _G

所有的全局变量都在 _G 中。

lua 复制代码
a = 1
print(_G["a"])

-> 1

多重调用

lua 复制代码
print(_G["table"]["insert"])

-> function:0xc1

真假

lua 复制代码
a = true
b = false

print(1<2)
print(1>2)
print(1==2)
print(1<=2)
print(1>=2)
print(1~=2)

print(a and b)
print(a or b)
print(not b)

->true
false
false
true
false
true
false
true
true

输入 <=,会自动变成符号 ≤。

不等于是 ~=,与C的 != 不同。

lua 复制代码
a = nil --假
b = 0 --真
print(a and b)
print(a or b)
print(not b)

->nil
0
false

注意,lua中只有false和nil代表假,其他都是真,0也是真。

and 和 or 会返回原值,只有 not 一定返回true 或 false。

lua 复制代码
b = 9
print(b>10 and "yes" or "no")

-> no

判断语句

lua 复制代码
if 1>10 then
    print("1>18")
elseif 1<10 then
    print("1<10")
else
    print("no")
end

-> 1<10

用 then 和 end 表示代码块。

lua 复制代码
if 0 then
    print("0 is true!")
else
    print("0 is false!")
end

-> 0 is true!

可以用 if语句验证 0 是代表 true 的。


循环

for 循环

lua 复制代码
for i=1,10,2 do
    print(i)
end

->1
3
5
7
9

lua不支持在循环中更改 i 的值,这里跟C是不一样的。

lua 复制代码
for i=10,1,-1 do
	print(i)
	if i==5 then break end
end

->10
9
8
7
6
5

支持 break 操作。


while 循环

c 复制代码
loca1 n = 5
while n>1 do
	if n==3 then break end
	print(n)
	n=n-1
end

->
5
4

lua不支持n --n -= 1


参考资料

1、B站视频:每日喝粥-Lua快速入门教程

2、lua官网手册:推荐学习路线文档

相关推荐
Natural_yz40 分钟前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805591 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装
一只小小汤圆1 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
醉陌离1 小时前
渗透测试笔记——shodan(4)
笔记
虾球xz1 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer7771 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz1 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py1 小时前
【Linux】-学习笔记04
linux·笔记·学习
weiabc2 小时前
学习electron
javascript·学习·electron
fengbizhe2 小时前
笔试-笔记2
c++·笔记