Lua语法基本使用

news2024/12/23 8:13:37

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

文章目录

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

23

一、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

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 编写的函数
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

可以使用type函数测试给定变量或者值的类型。
在这里插入图片描述

nil

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

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

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

输出:

false
true

四、基本语法

4.1 注释

两个减号是单行注释: --注释
多行注释 --[[ 注释 --]]

4.2 交互式编程

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

lua -i
Lua 5.4.6  Copyright (C) 1994-2023 Lua.org, PUC-Rio

4.3 字符串连接

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

print("hello".."world")

循环变量

-- 字符串
local str = 'Hello'

-- 数字
local num = 21

-- 布尔类型
local flag = true

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

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

访问

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

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

4.5 循环

4.5.1 while 循环

local a = 10
while (a < 20)
do
    print("value of a:", a)
    a = a + 1
end

输出:

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循环

for var=exp1,exp2,exp3 do  
    <执行体>  
end

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

for i = 10, 1, -1 do
    print(i)
end

输出

10
9
8
7
6
5
4
3
2
1

遍历数组

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

遍历table

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

4.5.3 repeat…until循环

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

repeat
   statements
until( condition )
local a = 10

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

输出

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 处会跳出循环。

local a = 10

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

4.6 函数

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))

输出

120
120

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

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 语句

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

输出

a 小于 20
a 的值为:       10

4.7.2 if…else 语句

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

输出

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。

在这里插入图片描述在这里插入图片描述

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

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

相关文章

【网络基础】IP

IP协议报头 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节. 8位服务类型(Type Of Service): 3位优先权字段(已经弃用…

网络空间搜索引擎

随着互联网、物联网、传感网、社交网络等信息系统所构成的泛在网络不断 发展&#xff0c;网络终端设备数量呈指数级上升。这为企业进行终端设备资产清点和统一 管控带来了巨大挑战&#xff0c;同时也引发了一系列安全问题&#xff0c;网络攻击与防御的博弈从 单边代码漏洞发展到…

SpringMVC 自动配置

SpringMVC 自动配置 一、WebMvcAutoConfiguration&#xff08;SpringMVC自动配置&#xff09;二、DisPatcherServletAutoConfiguration.class&#xff08;中央调度器自动配置&#xff09;三、WebMvcConfigurationSupport&#xff08;SpringMVC组件配置类&#xff09;四、Servle…

RHCE 搭建DNS域名解析服务器

目录 一、前述 1、BIND&#xff08;Berkeley Internet Name Domain&#xff09; 2、bind服务中三个关键文件 1&#xff09;主配置文件/etc/named.conf 2&#xff09;区域配置文件/etc/named.rfc1912.zones 正向解析 反向解析 3&#xff09;数据配置文件目录/var/named/…

STM32 1-5

目录 STM32简介 点亮PC13LED GPIO LED闪烁 LED流水灯 按键控制LED 光敏传感器控制蜂鸣器 OLED调试工具 OLED显示 EXTI外部中断 对射式红外传感器计次 旋转编码器计次 继续 STM32简介 点亮PC13LED main.c #include "stm32f10x.h" // D…

Hadoop-MapReduce-YarnChild启动篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、上下文 在上一篇<Hadoop-MapReduce-MRAppMaster启动篇>中已经将到&#xff1a;MRAppMaster的启动&#xff0c;那么运行M…

如何让wordpress首页只显示某一篇文章全部内容?在您的主页显示选择

大多数WordPress站点首页默认都是显示最新发布的文章列表&#xff0c;不过有些站点比较特殊&#xff0c;只想显示某一篇文章的全部内容&#xff0c;那么应该怎么设置呢&#xff1f; 其实&#xff0c;WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…

VS+QT 配置Eigen库

1、下载Eigen库&#xff0c;如下&#xff1a; 2、解压到项目目录下&#xff0c;如下&#xff1a; 3、 在C/C中包含文件&#xff0c;如下&#xff1a; 4、在头文件中加入如下代码&#xff1a; 5、测试代码&#xff1a; //.cpp文件 #include "testEigen.h"testEigen::…

【Python】03快速上手爬虫案例三:搞定药师帮

文章目录 前言1、破解验证码2、获取数据 前言 流程&#xff1a;通过用户名、密码、搞定验证码&#xff0c;登录进药师帮网站&#xff0c;然后抓取想要的数据。 爬取数据&#xff0c;最终效果图&#xff1a; 1、破解验证码 使用药师帮测试系统&#xff1a;https://dianrc.ysb…

快速入门存内计算—助力人工智能加速深度学习模型的训练和推理

存内计算&#xff1a;提高计算性能和能效的新技术 传统的计算机架构是将数据存储在存储器中&#xff0c;然后将数据传输到计算单元进行处理。这种架构存在一个性能瓶颈&#xff0c;即数据传输延迟。存内计算通过将计算单元集成到存储器中&#xff0c;消除了数据传输延迟&#…

HiveSQL题——窗口函数(lag/lead)

目录 一、窗口函数的知识点 1.1 窗户函数的定义 1.2 窗户函数的语法 1.3 窗口函数分类 1.4 前后函数:lag/lead 二、实际案例 2.1 股票的波峰波谷 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 前后列转换&#xff08;面试题&#xff09; 0 问题描述 1 数据准备 …

kubernetes-快速部署一套k8s集群

1、前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从github下载发行…

04.对象树

一、引入 1.QT实现输出"hello world" 使用QT编写"hello world"程序&#xff0c;有两种实现方式&#xff1a; &#xff08;1&#xff09;直接在生成的ui文件中&#xff0c;拖入一个label控件&#xff0c;双击控件编辑内容即可实现 &#xff08;2&#xff0…

【C++历练之路】探秘C++三大利器之一——多态

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;: 在计算机科学的广袤领域中&#xff0c;C多态性是一门令人着迷的技术艺术&#xff0c;它赋予我们的代码更强大的灵活性和可维护性。想象一下&#xff0c;你正在构建一个程序&#xff0c;需要适应不断…

【技术分享】远程透传网关-单网口快速实现威纶通触摸屏程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条&#xff0c;用于实现网络连接和连接触摸屏一台威纶通触摸屏及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡&#xff0c;WIFI联网则将WIFI天线插入USB口&#xff09;…

Redis 面试题 | 19.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定&#xff0c;可以查看自己电脑版本&#xff0c;终端输入命令 uname -a 点击Download下载&#xff0c;可跳过登录注册&…

沙龙回顾|“强标”发布在即,汽车数据安全的挑战与应对

随着智能汽车产业驶入发展快车道&#xff0c;“数据安全”的重要性也日益突出。2020年以来发现的针对整车企业、车联网信息服务提供商等相关企业的恶意攻击达到280余万次。2023年初至今&#xff0c;就发生超过20起与车企相关数据泄露事件&#xff0c;汽车数据安全的现状不容乐观…

基于Matlab无刷直流电机系统仿真建模的新方法

摘 要&#xff1a;在分析无刷直流电机&#xff08;BLDC&#xff09;数学模型的基础上&#xff0c;提出了无刷直流电机系统仿真建模的 新方法。在Matlab/Simulink 中&#xff0c;建立独立的功能模块&#xff0c;如BLDC 本体模块、电流滞环控制模块、 速度控制模块等&#xff0c;…

防御保护--智能选路

目录 就近选路 策略选路--PBR DSCP优先级 智能选路--全局路由策略 1.基于链路带宽的负载分担 2.基于链路质量进行负载分担 3.基于链路权重进行负载分担 4.基于链路优先级的主备备份 ​编辑 DNS透明代理 就近选路 我们希望在访问不同运营商服务器时&#xff0c;通过对…