官方地址: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.gz2. 解压安装包 检查依赖是否安装:yum install gcc gcc-c++ automake autoconf libtool make gd gd-devel libxslt-devel tar –zxvf lua-5.4.3.tar.gz3. 编译安装make linux testmake 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 垃圾回收会释放内存
表的操作:
序号 | 方法 & 用途 |
---|---|
1 | table.concat (table [, step [, start [, end]]]): concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(step)隔开。 |
2 | table.insert (table, [pos,] value): 在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾. |
3 | table.maxn (table) 指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现) |
4 | table.remove (table [, pos]) 返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。 |
5 | table.sort (table [, comp]) 对给定的table进行升序排序。 |
5.流程控制
If语句:
Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在 条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。
If语法:
if(布尔表达式) then --[ 在布尔表达式为 true 时执行的语句 --] endif(布尔表达式) then --[ 布尔表达式为 true 时执行该语句块 --] else --[ 布尔表达式为 false 时执行该语句块 --] end
--[ 定义变量 --]a = 10;--[ 使用 if 语句 --]if( a < 20 )then --[ if 条件为 true 时打印以下信息 --] print("a 小于 20" );endprint("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博客