当前位置:网站首页>Lua 快速入门(一)——基础语法
Lua 快速入门(一)——基础语法
2022-08-11 05:31:00 【canon_卡农】
前言
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有点相似,还是挺容易上手的。
边栏推荐
猜你喜欢
Day 86
USB in NRZI to encode the data
C语言-6月10日-my_strcpy函数的编写
three.js基础学习
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
【LeetCode-455】方法饼干
Tinker的自我介绍
Event Preview | On April 23, a number of wonderful sharing sessions of OpenMLDB will come, which will live up to the good time of the weekend
The third phase of the contributor task is wonderful
Getting Started with JNI
随机推荐
OpenMLDB: Consistent production-level feature computing platform online and offline
c语言-数据存储部分
IO流和序列化与反序列化
Day 71
Day 67
星盟-pwn-babyfmt
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
Goldbach's conjecture and the ring of integers
Certificate of SearchGuard configuration
Intelligent risk control China design and fall to the ground
自己动手写RISC-V的C编译器-01实现加减法
C语言-7月21日-指针的深入
stack stack
The third phase of the contributor task is wonderful
C语言-6月8日-给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出
SearchGuard configuration
Asis2016 books null off by one
The whole process of Tinker access --- Compilation
Day 78
解决AttributeError: ‘NoneType‘ object has no attribute ‘val‘ if left.val!=right.val:Line 17 问题