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

news2025/7/19 17:04:36

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的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

W3F 宣布第二轮 Decentralized Voices 代理者,OneBlock+ 被委托 420 万 DOT 投票权

原文&#xff1a;https://medium.com/web3foundation/decentralized-voices-cohort-2-b10ddb7c71cc 编译&#xff1a;OneBlock Web3 基金会很高兴宣布 Polkadot 和 Kusama 的去中心化声音 (DV) 计划第二批启动&#xff0c;该计划通过将 180,000 KSM 和 4200 万 DOT 的投票权委…

最后一篇不再更新:前端的我转行国外土木了

一.本来早该去写了的&#xff0c;但是一直转行不成功。 你问我为什么要转行&#xff0c;这么说吧&#xff0c;楼主20届专科毕业之后干了一年多土木&#xff0c;相信大家在网络上也刷到过类似的视频。49年入国军。没错&#xff0c;苦逼的楼主不是一个开朗的人&#xff0c;也不是…

【全开源】ChatGPT 机器人公众号小程序h5源码开源交付支持二开

AI机器人系统对接OPENAI&#xff1a;智能互联的无限可能 &#x1f310; 一、引言&#xff1a;AI机器人系统与OPENAI的碰撞 在科技日新月异的今天&#xff0c;AI机器人系统正逐渐渗透到我们生活的各个角落。而当这一智能系统与全球领先的OPENAI技术相结合&#xff0c;又将擦出…

如何在 Go 应用程序中使用检索增强生成(RAG)

本文将帮助大家实现 RAG &#xff08;使用 LangChain 和 PostgreSQL &#xff09;以提高 LLM 输出的准确性和相关性。 得益于强大的机器学习模型&#xff08;特别是由托管平台/服务通过 API 调用公开的大型语言模型&#xff0c;如 Claude 的 LLama 2等&#xff09;&#xff0c…

echarts饼图实现饼旋转,引线翻转效果

先上效果图: 这里使用的是vue2.0。 npm install echarts 安装echarts后将其挂在在vue上,在main.js中进行操作 // 全局引入Echarts import * as echarts from "echarts"; // 然后挂载在vue原型上 Vue.prototype.$echarts = echarts; 全部代码: <template>…

Vulnhub-DC-8

靶机IP:192.168.20.143 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 用nmap和wappalyzer收集下信息 发现是Drupal 7网站 dirsearch扫下目录 ┌──(root㉿kali)-[/home/kali/Desktop] └─# dirsearch -u http://192.168.20…

Redis 最佳实践

一、Redis 键值设计 1.1 优雅的 key 结构 Redis 的 Key 虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 1、遵循基本格式&#xff1a;[业务名称]:[数据名]:[id] 2、长度不超过 44 字节&#xff08;不同版本可能具体的大小不同&#xff09; 3、不包…

算法day30

第一题 433. 最小基因变化 题型转化&#xff1a;可以转化为边权为一的最短路问题 将最开始的字符串定义为起点&#xff0c;我们将初识字符串每一个元素改变一次定义为移动一个位置&#xff0c;最后的字符串定义为中点&#xff0c;就这样每一次改变一个元素&#xff0c;最后成功…

springboot3 基础特性(1)

文章目录 一、SpringApplication三种方式1.1 基础方式1.2.自定义 SpringApplication1.3、FluentBuilder API 二、自定义Banner三、Profiles3.1 什么是 Profiles &#xff1f;3.2 声明Profiles3.3 激活配置文件3.3.1 分组3.3.2 环境包含3.3.3 激活方式3.3.4 配置优先级 一、Spri…

大型医院手术麻醉系统源码,前端采用Vue,Ant-Design开发,稳定成熟

医院手麻系统源码&#xff0c;手术麻醉信息系统&#xff0c;C#源码 医院手术麻醉信息系统包含了手术申请、排班、术前、术中、术后&#xff0c;直至出院的全过程。通过与相关医疗设备连接&#xff0c;与大屏幕显示公告相连接&#xff0c;实现了手术麻醉临床应用数据链全打通。…

一文让你清晰了解医疗行业采购堡垒机的必要性

医疗行业&#xff0c;一个与大家息息相关的行业。随着医疗行业的快速发展和信息化建设的深入推进&#xff0c;传统网络安全防护手段已经难以满足现代医疗信息系统的安全需求&#xff0c;特别是在处理敏感的患者信息和保障医院内部数据安全方面。因此采购堡垒机是非常必要的。 堡…

在BFT购买到了一款超好用的夹爪,发现BFT Robotics方便又专业

“买机器人&#xff0c;上BFT” BFT作为一站式机器人工业互联网平台&#xff0c;提供了多种夹爪产品&#xff0c;包括但不限于Robotiq品牌的夹爪。这些夹爪产品广泛应用于自动化生产线&#xff0c;提高生产效率和精度。以下是对BFT购买的夹爪进行的详细测评。 我之前在BFT上购…

Vue33-更新流程

一、更新流程预览 二、<template>标签说明 <template>元素不能作为根元素。 三、beforeUpdate函数 四、updated函数

【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(一)

一.游戏逻辑概述 游戏完成图如图下所示&#xff1a; 根据游戏设定&#xff0c;需要实现的总体框架如下&#xff1a; 场景中有玩家可以操纵的初始角色-贪吃蛇场景中有AI自动操作的敌人-敌对贪吃蛇场景中的彩色圆点可以被敌人或者玩家吃掉&#xff0c;并且增加分数玩家触碰到敌人…

华为大咖说 | AI 是行业的未来, 还是另一个“元宇宙”?

本文作者&#xff1a;陈冠宏&#xff08;华为网络MSSD首席顾问&#xff09;全文约4497字&#xff0c;阅读约需10分钟 在本年度的517电信日上&#xff0c;中国电信高层在产品升级计划发布会中喊出“ALL in AI”战略&#xff0c;其震撼力让人瞩目。 自2022年11月OpenAI推出划时代…

全国各城市劳动力就业及收入状况数据, 2020-2022年,附高清可视化地图

基本信息. 数据名称: 全国各城市劳动力就业及收入状况数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据可视化.

【SpringCloud学习笔记】RabbitMQ(中)

1. 交换机概述 前面《RabbitMQ上篇》我们使用SpringAMQP来演示如何用Java代码操作RabbitMQ&#xff0c;当时采用的是生产者直接将消息发布给队列&#xff0c;但是实际开发中不建议这么做&#xff0c;更加推荐生产者将消息发布到交换机(exchange)&#xff0c;然后由exchange路由…

AI 大模型的赛点:通用与垂直之争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

机器视觉:光源的类型以及主要参数

光源在机器视觉中起着决定性的作用&#xff0c;决定了视觉算法的复杂性&#xff0c;也决定了视觉系统的精度和稳定性。光源用于突出目标物体的特征&#xff0c;增加目标物体与背景的对比度&#xff0c;克服环境光线的干扰。光源的选择与打光方式在视觉系统的前期评估中非常重要…

【DIY飞控板PX4移植】BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置

BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置 BMP388简介硬件设计封装原理图PCB设计引脚选择问题 PX4驱动配置飞控板的配置文件夹结构default.px4board文件nuttx-config/nsh/defconfig文件nuttx-config/include/board.h文件src/board_config.h文件src/i2c.cpp文件init/rc.b…