Lua语法基本使用

🍓 简介:java系列技术分享(👉持续更新中...🔥)

🍓 初衷:一起学习、一起进步、坚持不懈

🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏

🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击

文章目录

  • 一、Lua简介
  • 二、Lua安装
    • [2.1 Hello World 入门](#2.1 Hello World 入门)
  • 三、数据类型
  • 四、基本语法
    • [4.1 注释](#4.1 注释)
    • [4.2 交互式编程](#4.2 交互式编程)
    • [4.3 字符串连接](#4.3 字符串连接)
    • [4.5 循环](#4.5 循环)
      • [4.5.1 while 循环](#4.5.1 while 循环)
      • [4.5.2 for 循环](#4.5.2 for 循环)
      • [4.5.3 repeat...until循环](#4.5.3 repeat...until循环)
      • [4.5.4 循环控制语句](#4.5.4 循环控制语句)
    • [4.6 函数](#4.6 函数)
    • [4.7 流程控制](#4.7 流程控制)
      • [4.7.1 if 语句](#4.7.1 if 语句)
      • [4.7.2 if...else 语句](#4.7.2 if...else 语句)
    • [4.8 逻辑运算符](#4.8 逻辑运算符)

一、Lua简介

官网:https://www.lua.org
Lua 教程 | 菜鸟教程:https://www.runoob.com/lua/lua-tutorial.html
LuatOS 文档:https://wiki.luatos.com/
LuatOS 在线模拟 - lua在线测试 :https://wiki.luatos.com/_static/luatos-emulator/lua.html

Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua作为一种脚本语言(解释型语言),号称性能最高的脚本,被广泛应用在很多需要性能的地方,比如nginx,游戏脚本,OpenResty等等。在我的项目agent中,使用lua脚本实现了任务处理逻辑。任务执行器在接收到任务时选择对应的lua脚本执行任务,与执行器进行解耦,同时支持热更新。

二、Lua安装



Lua的安装非常简单,如果是Linux系统,则将make all test替换掉make linux test

shell 复制代码
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test

2.1 Hello World 入门

  1. 新建hello.lua文件

  2. 在其中添加 print("Hello World")

  3. 运行 lua hello.lua

    测试成功

三、数据类型

数据类型 描述 说明
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 nil 作比较时应该加上双引号
boolean 包含两个值:false和true。 Lua 把 false 和 nil 看作是"假",其他的都为"真"
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示 也可以用 2 个方括号 "[[]]" 来表示"一块"字符串。使用 # 来计算字符串的长度
function 由 C 或 Lua 编写的函数
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

可以使用type函数测试给定变量或者值的类型。

nil

nil 类型表示空值,给全局变量赋值 nil 等同于把它们删除。
nil 作比较时应该加上引号

lua 复制代码
if (type(nil)==nil) then
    print(true)
else
    print(false)
end

if (type(nil)=="nil") then
    print(true)
else
    print(false)
end

输出:

lua 复制代码
false
true

四、基本语法

4.1 注释

两个减号是单行注释: --注释

多行注释 --[[ 注释 --]]

4.2 交互式编程

Lua 交互式编程模式可以通过命令 lua -ilua 来启用:

shell 复制代码
lua -i
Lua 5.4.6  Copyright (C) 1994-2023 Lua.org, PUC-Rio

4.3 字符串连接

可以使用操作符...(两个点)

shell 复制代码
print("hello".."world")

循环变量

shell 复制代码
-- 字符串
local str = 'Hello'

-- 数字
local num = 21

-- 布尔类型
local flag = true

-- 数组
local arr = {'java','python','lua'}

-- table 
local map = {name = 'Jack',age = 12}

访问

sehll 复制代码
--访问数组  ,lua数组的角标从1开始
print(arr[1])

-- 访问 table
print(map['name'])
print(map.name)

4.5 循环

4.5.1 while 循环

lua 复制代码
local a = 10
while (a < 20)
do
    print("value of a:", a)
    a = a + 1
end

输出:

less 复制代码
value of a:     10
value of a:     11
value of a:     12
value of a:     13
value of a:     14
value of a:     15
value of a:     16
value of a:     17
value of a:     18
value of a:     19

4.5.2 for 循环

数值for循环

lua 复制代码
for var=exp1,exp2,exp3 do  
    <执行体>  
end

varexp1 变化到 exp2,每次变化以 exp3 为步长递增,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。

lua 复制代码
for i = 10, 1, -1 do
    print(i)
end

输出

lua 复制代码
10
9
8
7
6
5
4
3
2
1

遍历数组

lua 复制代码
local arr = {'java','python','lua'}
--遍历数组
for index,value in ipairs(arr) do 
	print(index,value)
end

遍历table

lua 复制代码
local map = {name = 'Jack',age = 12}
--遍历table
for key ,value in pairs(map) do
	print(index,value)
end

4.5.3 repeat...until循环

先执行循环体的语句,再进行条件判断,如果条件为 flase 则继续执行循环体,否则跳出循环。

lua 复制代码
repeat
   statements
until( condition )
lua 复制代码
local a = 10

repeat
    print("value of a:", a)
    a = a + 1
until (a > 15)

输出

lua 复制代码
value of a:     10
value of a:     11
value of a:     12
value of a:     13
value of a:     14
value of a:     15

4.5.4 循环控制语句

break语句
执行到 break 处会跳出循环。

lua 复制代码
local a = 10

while(a < 20)
do
    print("value of a:", a)
    a = a + 1
    if(a > 15) then
        break
    end
end

4.6 函数

lua 复制代码
local function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
local factorial2 = factorial1
print(factorial2(5))

输出

lua 复制代码
120
120

可变参数

Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 ... 表示函数有可变的参数。

lua 复制代码
local function add(...)
    local s = 0
    for i, v in ipairs { ... } do --> {...} 表示一个由所有变长参数构成的数组
        s = s + v
    end
    return s
end

print(add(3, 4, 5, 6, 7)) --> 25

内置函数

Lua 也有很多内置函数,我们可以通过官方手册进行查询:https://www.lua.org/manual/5.4/

4.7 流程控制

4.7.1 if 语句

lua 复制代码
--[ 定义变量 --]
local a = 10;
--[ 使用 if 语句 --]
if (a < 20)
then
    --[ if 条件为 true 时打印以下信息 --]
    print("a 小于 20");
end
print("a 的值为:", a);

输出

lua 复制代码
a 小于 20
a 的值为:       10

4.7.2 if...else 语句

lua 复制代码
--[ 定义变量 --]
local a = 100;
--[ 检查条件 --]
if (a < 20)
then
    --[ if 条件为 true 时执行该语句块 --]
    print("a 小于 20")
else
    --[ if 条件为 false 时执行该语句块 --]
    print("a 大于 20")
end
print("a 的值为 :", a)

输出

lua 复制代码
a 大于 20
a 的值为 :      100

4.8 逻辑运算符

设定 A 的值为 true,B 的值为 false

操作符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 (A and B) 为 false。
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 (A or B) 为 true。
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 not(A and B) 为 true。

相关推荐
Dcs几秒前
用 Python UTCP 直调 HTTP、CLI、MCP……
java
lanhuazui106 分钟前
lua中 string.match返回值
lua
无名客09 分钟前
redis分布式锁为什么采用Lua脚本实现。而不是事务
redis·分布式·lua·事务
快乐肚皮37 分钟前
fencing token机制
java·fencing token
叶落阁主1 小时前
Neovim 插件 i18n.nvim 介绍
java·vue.js·vim
渣哥1 小时前
让集合线程安全的几种靠谱方法
java
dylan_QAQ1 小时前
Java转Go全过程06-工程管理
java·后端·go
a587691 小时前
消息队列(MQ)初级入门:详解RabbitMQ与Kafka
java·分布式·microsoft·面试·kafka·rabbitmq
千里码aicood2 小时前
【springboot+vue】党员党建活动管理平台(源码+文档+调试+基础修改+答疑)
java·数据库·spring boot
Chan162 小时前
【智能协同云图库】基于统一接口架构构建多维度分析功能、结合 ECharts 可视化与权限校验实现用户 / 管理员图库统计、通过 SQL 优化与流式处理提升数据
java·spring boot·后端·sql·spring·intellij-idea·echarts