Administrator
Administrator
发布于 2026-04-12 / 2 阅读
0
1

Lua语言入门篇

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
  1. 时间片轮转法(注:同一时刻运行转就绪的进程排在新到达进程之后) 

进程名

到达时间

服务时间

开始时间

完成时间

周转时间

平均周转时间

A

0

3

0

4

4

4/3

B

2

6

2

18

16

16/6

C

4

4

5

17

13

13/4

D

6

5

7

20

14

14/5

E

8

2

10

15

7

7/2


评论