W
e
l
c
o
m
e
: )

Lua的安装与使用

一、Lua是什么

Lua 是一个轻量级、可嵌入式的脚本语言,1993年由巴西里约天主教大学开发。名字源于葡萄牙语"Lua"(月亮)。它由标准 C 编写,几乎可以在任何操作系统和平台上编译运行。当我们开发的项目需要脚本扩展能力,我们就可以通过定制脚本,将其嵌入到我们的宿主程序当中。像我们平时开发项目就可以使用Redis结合Lua脚本来进行一个限流的操作,通过使用Lua脚本,可以将多个命令放到一个脚本当中,不仅可以节省网络开销,同时Redis会将脚本中的命令作为一个整体来执行,中间不会嵌入其它命令(原子性,单线程)。除此之外,Lua还做到了极致的轻量化,完整解释器不到200KB,内存占用极低,同时它还是公认最快的脚本语言之一(高性能)。

二、安装Lua

注意:我这里使用的是Rocky Linux 9,命令和CentOS差不多!!

安装Lua很简单,我们首先要去下载它的一个压缩包:

http://www.lua.org/ftp/lua-5.3.6.tar.gz

下载完成后,按照如下步骤进行解压安装:

#解压缩
tar -zxvf lua-5.3.6.tar.gz
#进入解压目录
cd lua-5.3.6
#如果没有make的话,执行这一步进行安装,这会安装 make、gcc、g++ 等一整套编译开发工具
sudo dnf groupinstall "Development Tools"
#执行make linux
make linux
#执行make install
make install
#如果make过程出现:readline/readline.h:没有那个文件或目录
#执行完这一步,重新执行上面的make linux和make install
yum -y install ncurses-devel libevent-devel readline-devel

三、基础语法

3.1 Hello World

先来个常规入门,先创建一个hello.lua的脚本文件:

vim hello.lua

在文件内输入如下内容:

print("hello world!")

最后是运行这个脚本:

lua ./hello.lua
#输出结果
hello world!

3.2 注释

首先是单行注释,用--来标识:

-- 这个是单行注释

然后是多行注释,用--[[注释内容--]]

--[[
  我这里是多行注释:
  注释内容1
  注释内容2
--]]

3.3 标识符

Lua 标识符用于定义一个变量,函数获取其他用户定义的项。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上 0 个或多个字母,下划线,数字(0 到 9)。最好不要使用下划线加大写字母的标示符,因为Lua的语言内部的一些保留字也是这样的。Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符。 Lua 是一个区分大小写的编程语言。

3.4 关键字

关键字不能作为常量或变量,以下是lua的一些保留关键字:

and      break    do       else     elseif
end      false    for      function goto
if       in       local    nil      not
or       repeat   return   then     true
until    while

3.5 数据类型

Lua 是动态类型语言,变量无需声明类型,值本身携带类型信息。用 type() 函数可以查看类型。

3.5.1 nil

表示"无"或"不存在"。未初始化的变量或者没有创建过的不存在变量默认值为 nil

#任意目录下输入`lua`即可进入命令终端
> type(x)
nil

需要注意的是,在做类型比较的时候nil要加上双引号:

> x == nil
true
> x == "nil"
false
> type(x) == nil
false
> type(x) == "nil"
true

如果我们想要删除某个变量,可以直接给它赋值nil,等同于删除!

3.5.2 boolean

布尔boolean只有两种取值:truefalse。但是需要注意的是,在Lua中,只有falsenil才被视为“假”,其它诸如0,空字符串""和空table{}等都被视为“真”!

> if 0 then print("yes") end
yes
> if "" then print("yes") end
yes
> if {} then print("yes") end
yes
> if nil then print("no") end
> if false then print("no") end

3.5.3 number

在Lua中,不是是整数还是浮点数,都是number类型。

> print(type(2))
number
> print(type(2.2))
number

3.5.4 string

字符串在Lua中的表示,一般来说,如果是单行文本的话使用单引号''或者双引号""表示,如果是多行文本的话则使用[[]]来表示。

> print('aa')
aa
> print("bb")
bb
> a = [[hello
>> world]]
> print(a)
hello
world

在对数字字符串做算术运算的时候,Lua会尝试将字符串转换数字操作:

> print("2" + 6)
8.0
> print("2" + "6")
8.0

拼接两个字符串可以使用..

> print("hello".." Lua")
hello Lua

使用#可以计算字符串的长度:

> print(#"Hello World")
11

3.5.5 table

table既可以作为数组,也可以当哈希表使用:

> nums = {10,20,30}
# 注意下标是从1开始的
> print(nums[1])
10
> stu = {name="Bob",age=23}
> print(stu["name"])
Bob
> print(stu.name)
Bob

3.5.6 function

在Lua中,函数是以function开头,end结尾,中间是具体的函数定义:

> function concat(str1,str2)
>> return str1 .. str2
>> end
> print(concat("aaa","bbb"))
aaabbb

3.5.7 其它

还有userdatathread数据类型,这里先不涉及。

四、变量

Lua中的变量分为全局变量和局部变量两种,需要注意的是,除非是使用local显式声明的局部变量,其余哪怕是在语句块或者函数内创建的变量,都是全局变量。

> a = 5
> local b = 6
> function test()
>> c = 7
>> local d = 8
>> end
> test()
> print(a,b,c,d)
5	nil	7	nil

五、控制语句

5.1 循环控制

Lua的循环控制支持while 循环、for 循环、repeat...until循环和循环嵌套,同时,Lua也提供了break 语句和goto 语句。这里重点说for循环和while循环这两种使用较多的。for循环分为两种:

数值for循环

# 语法格式
for var=exp1,exp2,exp3 do  
    <执行体>  
end  

其中exp1表示起始值,exp2表示终止值,exp3表示步长(不写为1),有点类似于我们Java里面的for循环:

for(int i=0;i<10;i++){}

下面是具体使用:

> for i=0,10,1 do
>> print(i)
>> end
0
1
2
3
4
5
6
7
8
9
10

泛型for循环:
泛型for循环有点类似Java里的forEach迭代,通过一个迭代器函数来遍历所有的值:

> nums = {10,20,30}
> for i,v in ipairs(nums) do
>> print(i,v)
>> end
1	10
2	20
3	30

其中i是下标,v是值,ipairs是迭代器函数。
while循环:

#语法结构
while(condition)
do
   statements
end

下面是具体使用:

> a = 10
> while a<20 do
>> print(a)
>> a = a+1
>> end
10
11
12
13
14
15
16
17
18
19

5.2 if控制

Lua支持if 语句、if...else 语句和if 嵌套语句。

-- 语法格式
if(布尔表达式)
then
   --[ 在布尔表达式为 true 时执行的语句 --]
end
if...else 语句语法格式如下:
if(布尔表达式)
then
   --[ 布尔表达式为 true 时执行该语句块 --]
else
   --[ 布尔表达式为 false 时执行该语句块 --]
end

具体使用如下:

> a = 30
> if a<50 then
>> print("小于50")
>> else
>> print("大于等于50")
>> end
小于50

六、运算符

Lua提供的运算符如下表所示:

# 算术运算符
+	加法
-	减法
*	乘法
/	除法
%	取余
^	乘幂
-	负号
# 关系运算符
==	等于
~=	不等于
>	大于
<	小于
>=	大于等于
<=	小于等于
# 逻辑运算符
and	逻辑与操作符
or	逻辑或操作符
not	逻辑非操作符
posted @ 2026-09-19 15:28  寒月静无光  阅读(7)  评论(0)    收藏  举报