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。

相关推荐
向阳121815 分钟前
mybatis 缓存
java·缓存·mybatis
上等猿21 分钟前
函数式编程&Lambda表达式
java
蓝染-惣右介39 分钟前
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
java·设计模式
秋恬意1 小时前
IBatis和MyBatis在细节上的不同有哪些
java·mybatis
齐 飞2 小时前
BeanFactory和FactoryBean
java·sprint
大霞上仙2 小时前
lxml 解析xml\html
java·服务器·网络
Xiaoweidumpb2 小时前
tomcat temp临时文件不清空,占用硬盘,jdk字体内存泄漏
java·tomcat
AI人H哥会Java2 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
不能只会打代码2 小时前
Java并发编程框架之综合案例—— 分布式日志分析系统(七)
java·开发语言·分布式·java并发框架