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://xiahunao.cn/news/2868905.html

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

相关文章

【Machine Learning】Suitable Learning Rate in Machine Learning

一、The cases of different learning rates: In the gradient descent algorithm model: is the learning rate of the demand, how to determine the learning rate, and what impact does it have if it is too large or too small? We will analyze it through the follow…

vmware workstation虚拟机报错”该虚拟机似乎正在使用中“

虚拟机报错&#xff1a; 解决方法&#xff1a; 进入到虚拟机的安装目录里&#xff0c;将lck结尾的文件删掉即可 重新点击虚拟机恢复正常

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下&#xff1a; [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

DataGrip 面试题及答案整理,最新面试题

DataGrip的数据库兼容性和多数据库支持如何实现&#xff1f; DataGrip实现数据库兼容性和多数据库支持的方式包括&#xff1a; 1、广泛的数据库支持&#xff1a; DataGrip支持多种数据库&#xff0c;包括但不限于MySQL, PostgreSQL, SQL Server, Oracle, SQLite, 和MongoDB&a…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

进程学习--02

在C语言中&#xff0c;一般使用fork函数开辟进程&#xff0c;这个函数开辟进程后会返回一个进程号&#xff0c;在子进程中会返回0&#xff0c;在父进程中会返回子进程的进程号。 int main(){int ret fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}e…

进入jupyter notebook发现没有虚拟环境,最简单实用的解决办法!

jupyter notebook 1. 进入jupyter notebook发现没有虚拟环境2.解决办法2.1 检查是否有库ipykernel&#xff0c;我发现我没有2.2 开始安装ipykernel2.3 将虚拟环境写入 总结 1. 进入jupyter notebook发现没有虚拟环境 2.解决办法 2.1 检查是否有库ipykernel&#xff0c;我发现我…

提升口才表达能力的重要性与途径

提升口才表达能力的重要性与途径 口才表达能力&#xff0c;即一个人通过口头语言准确、流畅、生动地传达思想、情感和观点的能力&#xff0c;是现代社会中不可或缺的一项基本技能。无论是在职场沟通、人际交往还是公共场合发言&#xff0c;优秀的口才表达能力都能为我们带来诸…

【编程项目开源】拼图游戏(鸿蒙版)

目标 做个拼图游戏 效果 开发工具 下载DevEco Studio 工程截图 开源地址 https://gitee.com/lblbc/puzzle/tree/master/puzzle_hongmeng_arkUI 关于 厦门大学计算机专业|华为八年高级工程师 专注《零基础学编程系列》 http://lblbc.cn/blog 包含&#xff1a;Java | 安卓…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

代码随想录训练营Day24:● 理论基础 ● 77. 组合

理论基础 回溯算法解决的问题 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 切割问题&#xff1a;一个字符串按一定规则有几种切割方式 子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集 排列…

腾讯云图形验证码的PHP示例

需要准备的 1.API密钥 SecretId 及 SecretKey 两部分&#xff0c; SecretId 用于标识 API 调用者的身份&#xff0c; SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。 前往API密钥管理页面&#xff0c;即可进行获取 https://console.cloud.tencent.com/cam/ca…

swagger踩坑之请求类不显示具体字段

swagger踩坑之请求类不显示具体字段 省流&#xff1a;枚举字段需要加上ApiModelProperty注解 过程复现&#xff1a; TestEnum 枚举不加注解&#xff0c;swagger的UI类不显示详细字段 Data Accessors(chain true) ApiModel(value "test对象", description &quo…

基于SSM SpringBoot vue办公自动化计划管理系统

基于SSM SpringBoot vue办公自动化计划管理系统 系统功能 登录注册 个人中心 员工信息管理 部门信息管理 会议管理 计划管理 行程安排管理 行程进度管理 管理员管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端…

空间解析几何之直线与平面:推导直线与直线、直线与平面交点

空间解析几何——直线与平面 三维空间中的直线和平面与二维空间中的性质有一定的类似之处&#xff0c;但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达&#xff0c;然后推导线-线、线-面交点。 平面 空间平面的表达式为&#xff1a; A x B y…

Java面向对象案例之描述专业和学生(4)

类的方法图 学生类&#xff1a; 属性&#xff1a;学号&#xff0c;姓名&#xff0c;年龄&#xff0c;所学习的专业方法&#xff1a;学习的方法&#xff0c;描述学习状态。描述内容包括姓名、学号、年龄、所学习的专业信息 专业类&#xff1a; 属性&#xff1a;专业编号&#xf…

音乐制作的最佳选择FL Studio v21.2.3.4004 破解版2024最新下载

FL Studio v21.2.3.4004&#xff1a;音乐制作的最佳选择 随着音乐技术的发展&#xff0c;越来越多的人开始制作自己的音乐。其中&#xff0c;FL Studio作为一款集成了音序器、采样器、效果器、混响等多种功能的音乐制作软件&#xff0c;备受音乐制作人的青睐。而最新版的FL St…

倒计时30,28天

1.队列Q (nowcoder.com) //1. #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; const int inf0x3f3f3f3f; int dir[13]{0,31,28,31,30,31,30,31,31,30,31,30,31}; const double piacos(-1.0); int a[N],b[N]; bool cmp(int xx,int …

HTML+CSS3+Bootstrap第一章例子大全

纯手打&#xff0c;请大家多多支持&#xff08;拱手 目录 例1-1选择器的使用 例1-2盒子模型 项目1-1三栏定位 例1-3圆角区域 ​编辑例1-4特殊边框效果 例1-5对象阴影 例1-6线性渐变 例1-7径向渐变 项目1-2许愿墙 例1-1选择器的使用 <!DOCTYPE html> <html&g…

SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录 本系列文章目标开发步骤数据库表设计初始数据初始数据&#xff1a;AccountCategories初始数据&#xff1a;AccountUsages初始数据&#xff1a;ChartOfAccounts初始数据&#xff1a;AccountSubjects Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创…