当前位置: 首页 > 工具软件 > Lua > 使用案例 >

Lua 快速入门(一)——基础语法

高茂
2023-12-01

前言

Lua是由标准C实现的解释型语言,它的执行效率比较高,通常作为脚本嵌入到应用程序中。
由于支持热更新,Lua在游戏开发领域应用普遍。作为从业人员,不得不来填这个大坑。
本文是Lua入门学习笔记,来源是泰课的一个Lua教程。这里主要记录Lua的语法,以及实现
简单的OOP。
Lua 快速入门(一)——基础语法
Lua 快速入门(二)——函数(Function)
Lua 快速入门(三)——表(Table)
Lua 快速入门(四)——多脚本执行
Lua 快速入门(五)——协程(thread)
Lua 快速入门(六)——基础OOP


一、变量

Lua原生支持的数据类型共八种
简单变量类型:空值(nil)、数值(number)、字符值(string)、布尔值(boolean)。
复杂变量类型:表(table)、函数(function)、协程(thread)以及用户自定义数据(userdata)
Lua处理表和字符串的效率非常之高,加上元表的支持,开发者可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。

简单变量类型(nil、number、string、 boolean)

Lua是弱类型语言,所有的变量申明都不需要申明变量类型,解析时自动判断类型。
通过 type 函数 ,我们可以得到变量的类型。返回值是一个string类型。

print("**********nil************")
--lua中使用没有声明过的变量 
--不会报错 默认值 是nil
print(b)							--nil

a = nil									
print(a)							--nil
print(type(a))						--nil
print(type(type(a)))				--string

Lua中所有数值都是number,其本质是 C 中的 double类型。

print("**********number************")
a = 1
print(a)							--1
print(type(a))						--number
a = 1.2
print(a)							--1.2
print(type(a))						--number

字符值都是string类型,使用双引号或者单引号包裹。Lua中没有char类型。

print("**********string************")
str = "双引号字符串"
str2 = '单引号字符串'

--获取字符串的长度
print("**********字符串长度************")
s = "aBcdEfG字符串"
--不同编码汉字所占长度不同 2-4(UTF-8中占3个)
--英文字符 占1个长度
print(#s)					--16

print("**********字符串多行打印************")
--lua中也是支持转义字符的
print("123\n123")

s = [[使用
多行
打印
]]
print(s)

print("**********字符串拼接************")
--字符串拼接 通过..
print( "123" .. "456" )				--123456
s1 = 111
s2 = 222
print(s1 .. s2)						--111222	

print(string.format("我是Canon,我今年%d岁了", 18))
--%d :与数字拼接
--%a:与任何字符拼接
--%s:与字符配对
--.......
print("**********别的类型转字符串************")
a = true
print(tostring(a))					--true

print("**********字符串提供的公共方法************")
str = "AbCdefg"
--小写转大写的方法
print(string.upper(str))			--ABCDEFG
--大写转小写							
print(string.lower(str))			--abcdefg
--翻转字符串
print(string.reverse(str))			--gfedCbA
--字符串索引查找(这里返回两个值,表示开始和结束位置)
print(string.find(str, "Cde")) 		--3       5
--截取字符串
print(string.sub(str, 3, 4))		--Cd
--字符串重复(不咋用到)
print(string.rep(str, 2))			--AbCdefgAbCdefg
--字符串修改(这里返回两个值,第一个是修改后的字符串,第二个是修改的次数)
print(string.gsub(str, "Cd", "**")) --Ab**efg 1

--字符转 ASCII码	(将字符串中第几个字符转ASCII码)
a = string.byte("Lua", 1)			--76
print(a)
--ASCII码 转字符
print(string.char(a))				--L

布尔类型boolean

print("**********boolean************")
a = true
print(a)							--true	
a = false
print(a)							--false	
print(type(a))						--boolean

二、运算符

Lua支持 +,-, *, /, %, ^等运算符。
不支持自增和自减,也不支持+= ,-= ,/= …等复合运算符。

print("**********算数运算符************")
--字符串 可以进行 算数运算符操作 会自动转成number
print("加法运算" .. 1 + 2)
a = 1
b = 2
a = a + b
a = a + 1
print(a + b)					--6
print("123.4" + 1)				--124.4

print("减法运算" .. 1 - 2)
print("123.4" - 1)				--122.4

print("乘法运算" .. 1 * 2)
print("123.4" * 2)				--246.8

print("除法运算" .. 1 / 2)
print("123.4" / 2)				--61.7

print("取余运算" .. 1 % 2)
print("123.4" % 2)				--1.4

--^ lua中 该符号 是幂运算
print("幂运算" .. 2 ^ 5)
print("123.4" ^ 2)				--15227.56

print("**********条件运算符************")
-- > < >= <= == ~=
print(3>1)						--true
print(3<1)						--false
print(3>=1)						--true
print(3<=1)						--false
print(3==1)						--false
--不等于 是 ~=
print(3~=1)						--true

print("**********逻辑运算符************")
--与   或   非
--and  or  not  
print( true and false)			--false
print( true and true)			--true
print( false and true)			--false
print( true or false)			--true
print( false or false)			--false
print( not true)				--false

print("**********位运算符************")
-- & | 不支持位运算符 需要我们自己实现

print("**********三目运算符************")
-- ? :  lua中 也不支持 三目运算
-- lua中除了nil 和 false,其他值均判断为 true
-- 利用这个特性可以实现类似三目运算符的效果
if() and () or () 

三、流程控制语句

条件分支语句 if,不支持switch语句

print("**********条件分支语句************")
a = 9
--if 条件 then.....end
--单分支
if a > 5 then
	print("123")
end

--双分支
-- if 条件 then.....else.....end
if a < 5 then
	print("123")
else
	print("321")
end

--多分支
-- if 条件 then.....elseif 条件 then....elseif 条件 then....else.....end
if a < 5 then
	print("123")
elseif a == 6 then
	print("6")
elseif a == 7 then
	print("7")
else
	print("other")
end

if a >= 3 and a <= 9 then
	print("3到9之间")
end

--lua中没有switch语法  需要自己实现

循环控制语句 while ,repeat,for

print("**********while语句************")
num = 0
--while 条件 do ..... end
while num < 5 do
	print(num)
	num = num + 1
end
print("**********do while语句************")
num = 0
--repeat ..... until 条件 (注意:条件是结束条件)
repeat
	print(num)
	num = num + 1
until num > 5 --满足条件跳出 结束条件

print("**********for语句************")

for i =2,5 do --默认递增   i会默认+1
	print(i)
end

for i =1,5,2 do --如果要自定义增量 直接逗号后面写
	print(i)
end

for i =5,1,-1 do --如果要自定义增量 直接逗号后面写
	print(i)
end

总结

Lua是弱类型的脚本语言,语法看起来和JavaScript有点相似,还是挺容易上手的。

 类似资料: