lua脚本的基础内容

官方地址:http://luajit.org/
官方wiki地址:http://wiki.luajit.org/Home
推荐书籍:
OpenResty 最佳实践:https://moonbingbing.gitbooks.io/openresty-best-practices/content/
lua基础文档:https://www.runoob.com/lua/lua-tables.html,Lua 教程_w3cschool
lua中文文档:https://www.runoob.com/manual/lua53doc/ 
nginx中文文档:https://www.nginx.cn/doc/
nginx官方文档:http://nginx.org/en/docs/
nginx lua扩展文档:https://www.nginx.com/resources/wiki/modules/lua/
opm官方网站:https://opm.openresty.org/

1.简介

Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设施。 同时对面向对象编程、函数式编程和数据驱动式编程也提供了良好的支持。 它作为一个强大、轻量的嵌入式脚本语言,可供任何需要的程序使用。 Lua 由 clean C(标准 C 和 C++ 间共通的子集) 实现成一个库。

作为一门扩展式语言,Lua 没有 "main" 程序的概念: 它只能 嵌入 一个宿主程序中工作, 该宿主程序被称为 被嵌入程序 或者简称 宿主 。 宿主程序可以调用函数执行一小段 Lua 代码,可以读写 Lua 变量,可以注册 C 函数让 Lua 代码调用。 依靠 C 函数,Lua 可以共享相同的语法框架来定制编程语言,从而适用不同的领域。 Lua 的官方发布版包含一个叫做 lua 的宿主程序示例, 它是一个利用 Lua 库实现的完整独立的 Lua 解释器,可用于交互式应用或批处理。

Lua 编程的细节介绍, 请参阅 Roberto 的书,Programming in Lua

Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中, 从而为应用程序提供灵活的扩展和定制功能。
用途:
1. Redis+nginx+lua 脚本的限流方案
2. redis 中嵌入 lua 脚本
3. 游戏
4. 配合 nginx redis 做网页数据缓存
Lua脚本的优势:
1. 轻量级
2. 扩展性好
3. 功能全
2.Lua脚本的安装:
1. 下载lua脚本安装包: http://www.lua.org/ftp/lua-5.4.3.tar.gz
2. 解压安装包 检查依赖是否安装:
yum install gcc gcc-c++ automake autoconf libtool make gd gd-devel libxslt-devel tar –zxvf lua-5.4.3.tar.gz
3. 编译安装
make linux test
make install

3.变量与数据类型

Lua 标示符用于定义一个变量,函数获取其他用户定义的项,标识符的定义也具备 一些规则,具体如下: 1. 标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下 划线,数字(0到9)。

2. 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的

3. Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符

Lua中的关键词:

nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。

变量在使用前,必须在代码中进行声明,即创建该变量。编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。

Lua 变量有三种类型:全局变量、局部变量、表中的域。

Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。

局部变量的作用域为从声明位置开始到所在语句块结束。

变量的默认值均为 nil。

Lua的数据类型:

Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。

4.数组与表

数组概念:

数组,就是相同数据类型的元素按一定顺序排列的集合,可以是 一维数组和多维数组。

Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。

数组定义:

一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for 循环出数组中的元素,如下实例:
 

array = {"Lua", "Tutorial"}for i= 0, 2 doprint(array[i])end
表定义:

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。 Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。 Lua table 是不固定大小的,你可以根据自己需要进行扩容。

-- 初始化表
mytable = {} 
-- 指定值
mytable[1]= "Lua" 
-- 移除引用
mytable = nil 
-- lua 垃圾回收会释放内存
表的操作:
序号方法 & 用途
1table.concat (table [, step [, start [, end]]]):

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(step)隔开。

2table.insert (table, [pos,] value):

在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

3table.maxn (table)

指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

4table.remove (table [, pos])

返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

5table.sort (table [, comp])

对给定的table进行升序排序。

5.流程控制

If语句:

Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在 条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。

If语法:
if(布尔表达式) then 
--[ 在布尔表达式为 true 时执行的语句 --] 
end
if(布尔表达式) 
then 
--[ 布尔表达式为 true 时执行该语句块 --] 
else 
--[ 布尔表达式为 false 时执行该语句块 --] 
end
--[ 定义变量 --]
a = 10;--[ 使用 if 语句 --]
if( a < 20 )
then--[ if 条件为 true 时打印以下信息 --]print("a 小于 20" );
end
print("a 的值为:", a);
FOR循环:

很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。 循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

FOR语法:
for var=exp1,exp2,exp3 do 
<执行体> 
end 
--打印数组a的所有值
for i,v in ipairs(a) do 
print(v) 
end 

--for循环
--a = {"a","c","d"}
--for i,j in ipairs(a) do
--    --print(i)
--    print(j)
--end
----表达式的前面一个值是key,后者是值
While循环:
while(condition) 
do 
statements 
end

statements(循环体语句) 可以是一条或多条语句

condition(条件) 可以是任意表达式

在 condition(条件) 为 true 时执行循环体语句

--while循环
--i = 1
--while (i > 10)
--do
--    i = i+1
--    print(i)
--end
Lua repeat…until 循环

Lua 编程语言中 repeat...until 循环语句不同于 for 和 while循环,for 和 while循环d 的条件语句在当前循环执行开始时判断,而 repeat...until 循环的条件语句在当前循环 结束后判断。

repeat 
statements 
until( condition )

statements(循环体语句) 可以是一条或多条语 condition(条件) 可以是任意表达式,在 condition(条件) 为 true 时执行循环体语句。 在condition(条件)为 false 时会跳过当前循环并开始脚本执行紧接着的语句。

--repeat ... until()循环
--i = 1
--repeat
--    i = i+1
--    print(i)
--until (i > 10)

资源下载地址:lua-5.4.3.tar.gz资源-CSDN文库

lua学习笔记(1)----lua开发环境的搭建 lua代码编译出可执行文件_lua编译成可执行程序-CSDN博客

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

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

相关文章

深入理解生成型大型语言模型:自监督预训练、细调与对齐过程及其应用

分析概述 本文主要介绍了生成型大型语言模型&#xff08;LLM&#xff09;的预训练过程&#xff0c;特别是通过下一个令牌&#xff08;token&#xff09;预测的自监督学习方法&#xff0c;以及后续的细调&#xff08;finetuning&#xff09;和对齐&#xff08;alignment&#x…

【网络】负载均衡

OSI模型每一层的负载均衡 在OSI模型中&#xff0c;每一层的负载均衡具体如下&#xff1a; 1. 第二层&#xff08;数据链路层&#xff09;&#xff1a;数据链路层的负载均衡通常涉及对MAC地址的操作。在这一层&#xff0c;可以使用虚拟MAC地址技术&#xff0c;外部设备对虚拟MA…

【SQL Server】实验七 数据完整性

1 实验目的 掌握实体完整性、参照完整性和用户自定义完整性约束的创建方法。掌握完整性约束的运行检查机制。掌握参照完整性的级联删除和修改方法。掌握正确设计关系模式完整性约束的方法。 2 实验内容 2.1 掌握实体完整性约束的创建和使用方法 创建表时定义由一个属性组成…

解决Linux中Eclipse启动时找不到Java环境的问题

按照报错的意思是没有在/usr/local/eclipse/jre/bin/java下找到java环境&#xff0c;我检查了一下eclipse的目录结构发现在/usr/local/eclipse没有jre/bin/java&#xff0c;我的想法是自己建对应文件夹然后软连接到我的java环境 cd /usr/local/eclipse sudo mkdir jre cd jre s…

将OpenCV与gcc和CMake结合使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇&#xff1a; 引言&#xff1a; 近年来&#xff0c;计算机视觉技术在图像处理、目标检测和机器人等方面得到了广泛的应用…

论文篇00-【历年论文真题考点汇总】与【历年论文原题2009~2023年文字版记录】(2024年软考高级系统架构设计师冲刺知识点总结-论文篇-先导篇)

专栏系列文章推荐: 案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】 综合知识篇00-综合知识考点汇总目录 ...... 历年真题论文题考点汇总 历年软考系统架构设计师论文原题(2009-2022年) 因最新的2023年目前仅能搜索到回忆版,等楼主搜集到…

关于数据通信知识的补充——第二篇

目录 四.二层交换机 5.实现不同vlan通信的原理 方法一&#xff1a;路由器网关 方法二&#xff1a;单臂路由 方法三&#xff1a;三层交换机 五.三层路由技术 &#xff08;1&#xff09;直连路由 &#xff08;2&#xff09;静态路由 &#xff08;3&#xff09;动态路由 …

go的fasthttp学习

背景介绍 fasthttp was designed for some high performance edge cases. Unless your server/client needs to handle thousands of small to medium requests per second and needs a consistent low millisecond response time fasthttp might not be for you. For most ca…

【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧

目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程&#xff0c;通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…

Linux中 vim 编辑器的使用

文章目录 前言一、vim编辑器模式二、简单的插入、保存和退出三、 命令模式下常用命令即其作用1. 命令模式 思维导图 前言 首先&#xff0c;了解一下 什么是vim 编辑器&#xff1f;在不同的系统中&#xff0c;文本的管理也会不同&#xff1b;windos系统就不多说了&#xff0c…

compile→错误: 不支持发行版本 17

错误: 不支持发行版本 17 具体错误描述如下&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project big-event: Fatal error compiling: 错误: 不支持发行版本 17 -> [Help 1] [ERROR] …

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

Redisson 分布式锁原理分析

Redisson 分布式锁原理分析 示例程序 示例程序&#xff1a; public class RedissonTest {public static void main(String[] args) {Config config new Config();config.useSingleServer().setPassword("123456").setAddress("redis://127.0.0.1:6379"…

cool 中的Midway ----node.js的TypeORM的使用

1.介绍 TypeORM | Midway TypeORM 是 node.js 现有社区最成熟的对象关系映射器&#xff08;ORM &#xff09;。本文介绍如何在 Midway 中使用 TypeORM 相关信息&#xff1a; 描述可用于标准项目✅可用于 Serverless✅可用于一体化✅包含独立主框架❌包含独立日志❌ 和老写…

第二十四天-数据可视化Matplotlib

目录 1.介绍 2.使用 1. 安装&#xff1a; 2.创建简单图表 3.图表类型 1.一共分为7类 2.变化 1.折线图 3.分布 ​编辑 1.直方图 2.箱型图 4.关联 1. 散点图&#xff1a; 2.热力图&#xff1a; 5.组成 1.饼图 2.条形图 6.分组 1.簇型散点图 2.分组条形图 3.分…

JOSEF约瑟 TQ-100同期继电器 额定直流电压220V 交流电压100V±10V

TQ-100型同期继电器 TQ-100同期继电器 ​ l 应用 本继电器用于双端供电线路的自动重合闸和备用电源自投装置中&#xff0c;以检查线路电压与母线电压的 相位差和幅值差。 2 主要性能 2 1采用进口集成电路和元器件构成&#xff0c;具有原理先进、性能稳定、可靠性高、动作值精…

Git版本管理--远程仓库

前言&#xff1a; 本文记录学习使用 Git 版本管理工具的学习笔记&#xff0c;通过阅读参考链接中的博文和实际操作&#xff0c;快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 重学Git-Git远程仓库管理_git remote add origin-CSDN博客 Git学习笔记&am…

[自研开源] MyData 数据集成之数据过滤 v0.7.2

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 概述 本篇基于…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

【大模型系列】问答理解定位(Qwen-VL/Llama2/GPT)

文章目录 1 Qwen-VL(2023, Alibaba)1.1 网络结构1.2 模型训练 2 Llama2(2023, Meta)2.1 网络结构2.1.1 MHA/GQA/MQA2.1.2 RoPE(Rotary Position Embedding, 旋转式位置编码)2.1.3 RMSNorm 2.2 推理2.2.1 集束搜索(beam search)2.2.2 RoPE外推 3 GPT系列(OpenAI) 1 Qwen-VL(2023…