探索Lua语言:安装、基本语法与应用案例

Lua

Lua语言是在1993年由巴西一个大学研究小组发明的,其设计目标是作为嵌入式程序移植到其他应用程序。它是由C语言实现的,虽然简单小巧但功能强大,所以许多应用都选用它作为脚本语言,尤其是在游戏领域,如暴雪公司的“魔兽世界”和“愤怒的小鸟”。Nginx将Lua语言作为扩展,Redis则将Lua作为脚本语言来帮助开发者定制自己的Redis命令。

Redis 2.6版本通过内嵌支持Lua环境,也就是说一般的运用是不需要单独安装Lua的。

在Redis使用Lua脚本的好处

  1. 减少网络开销:在Lua脚本中可以把多个命令放在同一个脚本中运行。
  2. 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入(Redis执行命令是单线程)。
  3. 复用性:客户端发送的脚本会永远存储在Redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑。

为了方便学习Lua语言,我们还是建议单独安装一个Lua。

安装Lua

Lua在Linux中的安装:

  1. 下载Lua源码包:
    wget http://www.lua.org/ftp/lua-5.3.6.tar.gz
    
  2. 解压源码包:
    tar -zxvf lua-5.3.6.tar.gz
    
  3. 进入解压的目录:
    cd lua-5.3.6
    
  4. 编译并安装:
    make linux
    sudo make install
    
  5. 如果报错找不到readline/readline.h,可以通过以下命令安装相关依赖:
    sudo yum -y install libtermcap-devel ncurses-devel libevent-devel readline-devel
    
    然后重新执行make linuxmake install

安装完成后,直接输入lua命令即可进入Lua的控制台。

Lua基本语法

Lua学习起来非常简单,当然它也是一个独立的语言,自成体系。本节只讲述基础部分,如果工作中有深研Lua的需要,可以参考《Lua程序设计》,作者是罗伯托·伊鲁萨利姆斯基(Roberto Ierusalimschy)。
image.png

Hello World

在命令行中输入以下代码并查看效果:

print("Hello World!")

或者编写一个Lua脚本,然后执行它:

-- hello.lua
print("Hello World!")
注释
  • 单行注释:

    -- 这是单行注释
    
  • 多行注释:

    --[[
    这是多行注释
    --]]
    
标示符

Lua标示符用于定义一个变量、函数或其他用户定义的项。标示符以一个字母或下划线开头,后接零个或多个字母、下划线、数字。Lua区分大小写。以下是一些正确的标示符:

var1, _var, var_1
关键词

以下是Lua的保留关键词,不能作为常量、变量或其他用户自定义标示符使用:

and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while
全局变量

在默认情况下,变量总是全局的。给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量会返回nil。要删除一个全局变量,只需将其赋值为nil

Lua中的数据类型

Lua是动态类型语言,变量不需要类型定义,只需赋值即可。Lua中有8个基本类型:nilbooleannumberstringuserdatafunctionthreadtable

使用type函数测试变量或值的类型:

print(type(123))  -- 输出:number
print(type("hello"))  -- 输出:string
常用数据类型
  1. nil 类型表示一种没有任何有效值,只有一个值:nil。给全局变量或表里的变量赋nil值等同于删除它们。
  2. boolean 类型只有两个值:truefalsefalsenil为假,其他都为真。
  3. number 类型默认是双精度类型。
  4. string 用一对双引号或单引号表示,也可以用[[]]表示多行文本。
  5. table 可以作为数组或哈希表使用,初始索引一般从1开始。例子:
    -- 数组
    local array = {1, 2, 3}
    -- 哈希表
    local hash = {name="John", age=30}
    

Lua中的函数

函数以function开头,以end结尾。定义一个简单的字符串连接函数:

function concat(str1, str2)
    return str1 .. str2
end

print(concat("hello", " world"))

Lua中的控制语句

循环控制

Lua支持whileforrepeat...until循环。

  • 数值for循环

    for i = 1, 10, 1 do
        print(i)
    end
    
  • 泛型for循环

    local array = {"one", "two", "three"}
    for i, v in ipairs(array) do
        print(i, v)
    end
    
条件控制

Lua支持ifif...elseif嵌套语句。

  • if语句

    if condition then
        -- 代码块
    end
    
  • if…else语句

    if condition then
        -- true代码块
    else
        -- false代码块
    end
    

Lua中的运算符

Lua提供了算术运算符、关系运算符和逻辑运算符。

算术运算符
操作符描述
+加法
-减法
*乘法
/除法
%取余
^乘幂
-负号
关系运算符
操作符描述
==等于
~=不等于
>大于
<小于
>=大于等于
<=小于等于
逻辑运算符
操作符描述
and逻辑与
or逻辑或
not逻辑非

Lua其他特性

Lua还支持模块与包、元表、协程、文件IO操作、错误处理、代码调试、垃圾回收和面向对象等特性。更多详情请参考相关书籍。

Java对Lua的支持

在Java生态中,对Lua的支持主要通过LuaJ,这是一个Java的Lua解释器,基于Lua 5.2.x版本。

Maven依赖
<dependency>
    <groupId>org.luaj</groupId>
    <artifactId>luaj-jse</artifactId>
    <version>3.0.1</version>
</dependency>
参考代码

请参考luaj模块,注意本代码仅供参考,在工作中需要使用Lua语言或在Java中执行Lua脚本时,请自行仔细学习Lua语言和luaj-jse的使用。

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值