一文带你学会Lua语言
- 1.第一个Lua程序
- 2.Lua流程控制
- 3.Lua中的循环结构
- while循环语句
- for循环语句
- repeat循环语句
- 4.Lua数据类型
- 5.Lua字符串
- 6.Lua文件I/O操作
- 7.Lua协同程序
- 8.Lua语言中的注释和虚变量
1.第一个Lua程序
在命令行中,可以使用print()
来打印输出一些内容
print("lolo")
2.Lua流程控制
流程控制语句中最为典型的就是if语句也称单分支if语句。if语句由一个值为true或者false的条件语句和其他语句组成
除了单分支if语句之外,Lua语言也支持双分支的if…else
语句
需要注意的是,控制结构的条件表达式结果可以是任何值,Lua认为false和nil都是假,true和非nil都是真🥋
status = 404
if status == 200 then
print("200 OK")
elseif status == 500 then
print("500服务器错误")
else
print("404 not found")
end
3.Lua中的循环结构
while循环语句
下面给出了一个while循环的范例:
local x = 1
while (x < 10) do
print(x)
x = x + 1
end
for循环语句
与while不同的是,for语句可以直接控制循环重复执行的次数
for x = 1,5 do
print(x)
end
// 1
// 2
// 3
// 4
// 5
repeat循环语句
repeat…until
结构也是Lua的一种循环结构,这个结构不断地重复执行循环,直到指定的条件为真时为止
a = 11
repeat
print(a)
a = a + 1
until (a > 15)
4.Lua数据类型
Lua语言是一种动态类型的语言。这种语言在定义变量时不需要类型,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。在Lua中一共有8个基本类型,这8个类型分别是:nil、boolean、number、string、userdata、function、thread和table
5.Lua字符串
Lua语言中的字符串是由数字、字母、下画线组成的一串字符。表示一个字符串的方式有如下三种
- 使用单引号括起来的一串字符,例如
'hello'
- 使用双引号括起来的一串字符,例如
"hello"
- 使用[[和]]括起来的一串字符,例如
[[hello]]
由于字符串是一种最为常见的类型,因此Lua中含有很多的方法来对字符串进行操作:
string.upper
upper
函数将字符串中的字符全部转为大写字母
s = "hello"
s2 = string.upper(s)
print(s2) -- HELLO
string.lower
lower
函数将字符串中的字符全部转为小写字母
string.gsub(mainString, findString, replaceString, num)
gsub
函数的使用方法是将字符串mainString
中的findString
替换为replaceString
,num
为替换次数,num
的默认值为全部
s = "hello"
s2 = string.gsub(s, "l", "t", 1)
print(s2) -- hetlo
string.strfind (str, substr, [init, [end]])
strfind函数在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回这个内容的开始位置和结束位置。不存在则返回nil
string.reverse(arg)
reverse函数将字符串的内容反转
string.len(arg)
len函数计算字符串长度
…
..
用于链接两个字符串
print("hello".."world") -- helloworld
6.Lua文件I/O操作
Lua中使用I/O库来完成对文件的读取和处理操作。Lua中对文件的操作分为简单模式和完全模式
打开文件操作的语句为io.open()
:
file = io.open("D:/nmap.txt", "r")
print(file:read())
file:close()
7.Lua协同程序
线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作运行。在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确要求挂起的时候才会被挂起
coroutine.create()
:这个方法用来创建一个coroutine,将要进行多线程的函数作为参数,返回值是一个coroutine
coroutine.resume()
:这个方法用来完成coroutine重启操作,与create配合使用
coroutine.yield()
:这个方法用来实现coroutine的挂起操作,将coroutine设置为挂起状态
coroutine.status()
:这个方法用来查看coroutine的状态。这里coroutine的状态一共有dead、suspend、running
三种
coroutine.wrap()
:这个方法创建一个coroutine,用于返回一个函数,一旦调用这个函数,就进入coroutine,与create功能相同
coroutine.running()
:这个方法返回正在运行的coroutine。一个coroutine就是一个线程,当使用running时,返回的是当前正在运行的coroutine的线程号
示例:
co1 = coroutine.create(
function()
for i = 1,5 do
print("线程#1"..i)
coroutine.yield(co2)
end
end
)
co2 = coroutine.create(
function()
for i = 1,5 do
print("线程#2"..i)
coroutine.yield(co1)
end
end
)
for i = 1,5 do
coroutine.resume(co1)
coroutine.resume(co2)
end
输出效果:
线程#11
线程#21
线程#12
线程#22
线程#13
线程#23
线程#14
线程#24
线程#15
线程#25
8.Lua语言中的注释和虚变量
注释:
-- 单行注释
--[[
多行注释
多行注释
]]
虚变量:
在调用函数完成一些任务的时候,这些函数可能会返回不止一个值。例如,一个常见的函数string.find()
就有两个返回值,即查找到的子串的起止下标,如果不存在匹配则返回nil
如果只想要string.find
返回的第二个值,可以使用虚变量(即下画线)来存储丢弃不需要的数值:
local _,s = string.find("hello", "ll")
print(s) -- 4