Lua基础(一)(简单数据类型、运算符、条件分支语句、循环语句)

写在前面

Lua在游戏开发的热更新中应用广泛,大多数游戏开发岗位都会要求员工掌握Lua语法。本篇文章主要面向已有编程语言基础的人员,用于快速掌握Lua的基础。


Lua简介及基本语法

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能,常用于游戏开发中的热更新。

第一个Lua程序

--打印函数print()
print("hello world");
print("hello aa") --lua可以省略分号

-- 这是lua 的单行注释

--[[
    多行注释 1
]]

--[[
    多行注释 2
]]--

--[[
    多行注释 3
--]]

1. 简单数据类型(nil、boolean、number、string)

Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua中的变量有8种基本数据类型,分别为nil、boolean、number、string、userdata、function、thread 和 table,前四种为简单数据类型。
我们可以使用 type 函数测试给定变量或者值的类型。

1.1 nil类型

nil 有点类似其他语言中的null,表示为空,没有任何有效值。未声明过的变量默认值为nil。

print(a) -- 未声明过的变量,输出结果为nil

1.2 number(数字)类型

Lua 默认只有一种 number 类型 – double(双精度)类型(默认类型可以修改 luaconf.h 里的定义),任何数值都会被看作是number类型。
以下几种数值都为number类型

print(type(1))
print(type(1.11))
print(type(2e+1))

输出结果均为number

1.3 string(字符串)类型

--字符串的声明 使用一组单引号或双引号包裹都可
a = "abcdefg"
b = 'ccceee'
print(type(a))
print(type(b))

输出结果均为string

1.3.1 获取字符串长度

英文字符与其他语言一样,占1个长度,但Lua中的中文字符占3个长度。

s = "aBcd"
print(#s) -- 输出结果为4
s = "aBcd中文"
print(#s) -- 输出结果为10
1.3.2 字符串多行打印
-- 转义字符
print("abc\nabc") -- 换行符 \n
-- 使用 [[]]包裹
s = [[字符
串
打印
]]
print(s)
1.3.3 字符串拼接
-- 使用 .. 进行字符串连接
print("abc" .. "efg") -- 输出 abcefg

-- 数字和字符串之间也可以使用 .. 连接,连接后的结果为string类型
s = "abc"
num = 123
print(s .. num) -- 输出 abc123
num1 = 123
num2 = 456
print(num1 .. num2) -- 输出123456,类型为string
1.3.4 字符串格式化

Lua拥有与其他语言类似的format方法,但不同的是,这个函数的格式很像C语言中的printf()。

print(string.format("我叫田所浩二,今年%d岁了,是一名%s", 24 ,"学生"))
--Lua中使用%加一个字母(转义符)的形式表示转义码,以此接受不同的参数并将其转化成不同结果

常用转义码

  • %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
  • %d, %i - 接受一个数字并将其转化为有符号的整数格式
  • %u - 接受一个数字并将其转化为无符号整数格式
  • %f - 接受一个数字并将其转化为浮点数格式
  • %s - 接受一个字符串并按照给定的参数格式化该字符串

还可以进一步对格式化操作进行细化,在%号后面添加参数,参数将会以符号、占位符、对齐标识、宽度、小数位数/字串裁切 的顺序读入:

(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
(4) 宽度数值.
(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.

-- 日期格式化
print(string.format("日期格式化 %02d/%02d/%03d", 1, 10, 2022)) -- 输出结果为 日期格式化 01/10/2022
-- 十进制格式化
print(string.format("%.4f",1/3)) -- 输出结果为 0.3333
1.3.5 其他类型转字符串

Lua和其他语言差不多,一样拥有tostring()方法

a = true
print(type(tostring(a))) -- 输出为string
1.3.6 其他字符串常用公共方法
-- 定义一个字符串str作为效果演示
str = "AabbCc"

①字符串大小写转换

-- 小写转大写
print(string.upper(str)) -- 输出AABBCC
print(str) -- 大小写转换并不会影响到原字符串,输出AabbCc
-- 大写转小写
print(string.lower(str)) -- 输出aabbcc

②翻转字符串

print(string.reverse(str)) -- 输出cCbbaA

③字符串索引查找

print(string.find(str, "bC")) --find方法返回结果有两个值,输出4       5,代表字符串起始和结束位置

④截取字符串

print(string.sub(str, 3)) --输入1个索引参数时,从起始位置开始截取到结束,输出bbCc
print(string.sub(str, 3, 4)) --输入2个索引参数时,分别表示截取的起始位置与结束位置

⑤字符串重复

print(string.rep(str, 2)) -- 输出AabbCcAabbCc

⑥字符串替换

print(string.gsub(str, "bC", "**")) -- 输出Aab**c  1,返回结果的第二个值为替换次数

⑦字符、 ASCII码互相转换

print(string.byte("Lua", 1)) -- 第二个参数表示索引,输出'L'对应的ASCII码 76
print(string.char(76)) -- 输出'L'

1.4 boolean(布尔类型)

a = true
b = false
print(type(a)) -- 输出结果为boolean

2. 运算符

2.1 算数运算符

Lua中拥有与其他语言一样的+,-,*,/,%,//(加、减、乘、除、取余、整除)运算符,不同的是Lua中的幂运算符为^。

a = 3
b = 2
c = a + b
print(c) -- 5
c = a - b
print(c) -- 1
c = a * b
print(c) -- 6
c = a / b
print(c) -- 1.5
c = a % b
print(c) -- 1
c = a^2
print(c) -- 9
-- Lua5.3后的版本提供了 "//" 作为整除运算符
c = a // b
print(c) -- 1

--在lua中,纯数值字符串甚至可以与数字使用算数运算符,结果类型为number
d = "123"
c = d + a
print(c) -- 126

需要注意的是Lua中没有自增自减运算符(++、–),没有复合运算符(+=、-=、/=、*=、%=)

2.2 条件运算符

Lua中拥有与其他语言大部分一致的条件运算符(>、<、>=、<=、==),不同的是Lua中的不等号为"~="。

print(3 > 1) -- true
print(3 < 1) -- false
print(3 >= 1) -- true
print(3 <= 1) -- false
print(3 == 1) -- false
print(3 ~= 1) -- true

2.3 逻辑运算符

Lua中的逻辑与符号为"and",或为"or",非为"not"。
逻辑与:同为true时才为true;
逻辑或:有一个为true就为true;
逻辑非:取反。

print(true and false) -- false
print(true and true) -- true

print(true or false) -- true
print(false or false) -- false

print(not true) -- false

2.4 位运算符

Lua中不支持位运算符,需要自己实现,可以使用一些第三方库实现。

2.5 三目运算符

Lua中也不支持三目运算符(b ? x : y)。


3. 条件分支语句

Lua中没有switch语句,只有if条件语句作为条件分支语句。

3.1 if条件语句

Lua采用 if 条件 then …… end 的形式组成if条件单分支语句,双分支语句用else语句组成。

a = 9
if a > 5 then
	print("123")
end
-- 输出123

if a < 5 then
	print("123")
else
	print("456")
end
-- 输出456

根据多个条件可以选择多个分支进行执行,多分支语句用 elseif 条件 then 组成。

a = 9
if a < 5 then
	print("123")
elseif a == 10 then
	print("456")
elseif a < 10 then
	print("789")
end
-- 输出789

4. 循环语句

4.1 while语句

Lua中使用 while 条件 do …… end 形式的语句表示while循环。

num = 0
while num < 2 do
	print(num)
	num = num + 1
end

输出结果为
0
1

4.2 do while语句

Lua的do while循环与其他语言差别较大,采用的是 repeat …… until 结束条件 的形式。

num = 0
repeat
	print(num)
	num = num + 1
until num > 1 -- 满足条件跳出,为结束条件

输出结果为
0
1

4.3 for 语句

Lua中for循环语句使用for 变量名 = 起始值,结束值[,步数(默认为+1)] do …… end

for i = 0,2 do --逗号后的参数为,默认step为+1
	print(i)
end

输出结果为
0
1
2

for i = 0,4,2 do --第二个逗号后的参数为step
	print(i)
end
print()
for i = 2,0,-1 do
	print(i)
end

输出结果为
0
2
4

2
1
0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值