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。

相关推荐
garmin Chen6 分钟前
从 Transformer 到 Agent:大模型技术全景解析
java·人工智能·python·深度学习·transformer
愚公移码11 分钟前
蓝凌EKP18产品:流程引擎技术篇之流程核心概念模型
java·人工智能·流程引擎·蓝凌
Full Stack Developme19 分钟前
Apache Tika 教程
java·开发语言·python·apache
鹅城剑仙33 分钟前
Java线程池完全指南
java
李白的天不白35 分钟前
SmartAdmin(基于 Spring Boot 框架)中配置跨域请求 VUE3 设置请求头
java·前端
橙子进阶之路37 分钟前
Java线程(CompletableFuture)
java·开发语言
鹅城剑仙1 小时前
Java CompletableFuture 异步编程完全指南
java
2601_961875241 小时前
法考备考计划表|学习计划|资料已整理
java·开发语言·学习·eclipse·tomcat·c#·hibernate
重生之我是Java开发战士1 小时前
【Java SE】多线程(三):单例模式,阻塞队列,线程池与定时器
java·javascript·单例模式
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第115题】【并发篇】第15题:说一下悲观锁和乐观锁的区别?
java·开发语言·面试