在命令行中,可以使用print()
来打印输出一些内容
print("lolo")
流程控制语句中最为典型的就是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
下面给出了一个while循环的范例:
local x = 1
while (x < 10) do
print(x)
x = x + 1
end
与while不同的是,for语句可以直接控制循环重复执行的次数
for x = 1,5 do
print(x)
end
// 1
// 2
// 3
// 4
// 5
repeat…until
结构也是Lua的一种循环结构,这个结构不断地重复执行循环,直到指定的条件为真时为止
a = 11
repeat
print(a)
a = a + 1
until (a > 15)
Lua语言是一种动态类型的语言。这种语言在定义变量时不需要类型,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。在Lua中一共有8个基本类型,这8个类型分别是:nil、boolean、number、string、userdata、function、thread和table
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
Lua中使用I/O库来完成对文件的读取和处理操作。Lua中对文件的操作分为简单模式和完全模式
打开文件操作的语句为io.open()
:
file = io.open("D:/nmap.txt", "r")
print(file:read())
file:close()
线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作运行。在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确要求挂起的时候才会被挂起
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
注释:
-- 单行注释
--[[
多行注释
多行注释
]]
虚变量:
在调用函数完成一些任务的时候,这些函数可能会返回不止一个值。例如,一个常见的函数string.find()
就有两个返回值,即查找到的子串的起止下标,如果不存在匹配则返回nil
如果只想要string.find
返回的第二个值,可以使用虚变量(即下画线)来存储丢弃不需要的数值:
local _,s = string.find("hello", "ll")
print(s) -- 4