1.入门
打印函数
print("Hello World")
注释格式
--单行注释
--[[
多行注释
]]
--[[
多行注释2
]]--
--[[
多行注释3
--]]
分号
单句末尾的分号可加可不加
2.变量
2.1.变量类型
简单变量类型:nil,number,string,boolean
复杂变量类型:function,table表,userdata数据结构,thread协同程序(线程)
2.2.变量声明
变量的声明无需声明变量类型,且未初始化、未声明的变量名其默认值为nil
且一个变量能够装任何类型的数据,会自动识别
a = 1
print(a) -- 1
a = nil
print(a) -- nil
print(b) -- nil
c -- error!: 不能只写一个变量名在这,要么就得=赋值
2.3.简单数据类型
nil
相当于null,且nil作为一个数据类型名,也可以当一个值来使用来赋值给变量number
数字类型变量,任何数:整数,浮点数都是number类型string
字符串类型,且字符串既可以用双引号也可以用单引号表示
a = "abcde"
print(a) -- abcde
a = 'abcde'
print(a) -- abcde
boolean
布尔变量,正常的布尔变量
a = true
print(a) -- true
2.4.type函数
使用type函数来得到一个变量当前存储的数据的数据类型,其返回值为string类型
a = 1
print(type(a)) -- number
a = nil
print(type(a)) -- nil
a = 'abcd'
print(type(a)) -- string
a = true
print(type(a)) -- boolean
print(type(type(a))) -- string
3.字符串
3.1.字符串长度
使用字符 # 加上字符串的形式来得到字符串的长度,单个字母的长度为1,单个汉字的长度为3
s = "abcde"
print(#s) -- 5
s = "你好"
print(#s) -- 6
3.2.多行打印
使用转义字符或者多行字符串实现,多行字符串使用双重中括号括起,且该字符串不支持转义字符
s = "Abc\nAAA"
print(s) --[[
Abc
AAA
]]
s = [[
Hello
Wor\nld
]]
print(s) --[[
Hello
Wor\nld
]]
-- 或者直接
print([[
Hello
Wor\nld
]])
3.3.字符串拼接
使用两个点进行拼接 .. ,且使用这个符号拼接时,会自动将左右两侧的转换为字符串格式
print("abc" .. "def") -- abcdef
a = 1
b = 123
print(a .. b) -- 1123
或者使用string.format函数进行拼接,函数的参数格式类似于c语言的printf函数的参数形式
print(string.format("Hello and %d", 520)) -- Hello and 520
这里的格式符主要有%d:数字,%s:字符串,%a:用于match的字符匹配,format中用于将浮点数格式化为十六进制表示形式
3.4.字符串转换
使用tostring方法将其他数据转换为字符串
a = 12
print(tostring(a)) -- 12
3.5.常用的string方法
注意,以下方法都不会修改传入的str的值!
大小写转换:string.upper方法与string.lower
s = "AbcDef"
print(string.upper(s)) -- ABCDEF
print(string.lower(s)) -- abcdef
字符串翻转:string.reverse方法
s = "AbcDef"
print(string.reverse(s)) -- feDcbA
字符串查找:string.find(str, toFindStr),返回的是这个寻找的字符串的首位置两空格尾位置,一定会返回两个值。当查找失败时返回nil
注意,lua中字符串的第一个字符的索引从1开始!!!
s = "AbcDef"
print(string.find(s, "bcD")) -- 2 4
字符串截取:string.sub(str, head, (tail) ),表示截取从head位置开始到tail位置的全部字符串,包含head和tail位置的,tail可省略,省略则默认截取从head到字符串末尾
s = "AbcDef"
print(string.sub(s, 3)) -- cDef
print(string.sub(s, 3, 5)) -- cDe
字符串重复:string.rep(str, time),返回一个字符串,内容为str重复times次
s = "AbcDef"
print(string.rep(s, 2)) -- AbcDefAbcDef
字符串修改(替换):string.gsub(str, toReplace, newStr),将str中的所有toReplace替换为newStr,返回两个值,分别为得到的新字符串以及替换的次数
s = "AbcDefDe"
print(string.gsub(s, "De", "**") -- Abc**f** 2
字符串转ASC码与ASC码转字符:string.byte(str, index)将str的index位置的字符转换为对应的ASC码数字,string.char(asc)将数字asc转为ASC码对应的字符
s = "AbcDefDe"
a = string.byte(s, 4)
print(a) -- 68
print(string.char(a)) -- D
4.运算符
4.1.算数运算符
支持:加+ 减- 乘* 除/ 取余% 幂运算^
不支持:自加/减++ --、复合运算 += -= /= %=
print(1 + 2)
print(2 ^ 3) -- 8
另外,如果运算符两边有字符串时会自动将其转换为number类型进行计算
print("12" + 1) --13
print("12" + "22") -- 34
print("12.1" / 2) -- 6.05
4.2.条件运算符
有:< > <= >= == ~=,其中~=为不等于
print(3 ~= 1) --true
print(3 == "3") --false
4.3.逻辑运算符
有:and、or、not,分别为&&, ||, !
且and与or都有短路效果。
print( true and 1 < 3) -- true
print( false or 1 == 3) -- false
print(not true) -- false
4.4.位运算符与三目运算符
不支持
5.条件分支语句
每个if都要与一个end配对,出现条件判断语句的需要跟一个then
if ... then
-- code
elseif ... then
-- code
else
-- code
end
而且lua没有switch语法
6.循环语句
有while,类似的do-while以及for循环
do-while采用repeat-until语句,until后面跟的是结束条件
for语句默认每次循环后index自增1,可以自己设置第三个参数作为每次的自增量
-- while
while condition do
-- code
end
-- do while
repeat
-- code
until ExitCondition
-- for [min, max]
-- 默认自增1
for index = min, max do
-- code
end
-- 自定义增量,add可以是数值,也可以是一个变量
for index = min, max, add do
-- code
end
时间片轮转法(注:同一时刻运行转就绪的进程排在新到达进程之后)