openresty开发系列12--lua介绍及经常使用数据类型简介
lua介绍
1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里表明美丽的月亮。事实证实她没有糟蹋这个优美的单词,Lua 语言正如它名字所预示的那样成长为一门简洁、优雅且富有乐趣的语言。
Lua 从一开始就是做为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,所以她一直听从着简单、小巧、可移植、快速的原则,官方实现彻底采用 ANSI C 编写,能以 C 程序库的形式嵌入到宿主程序中。LuaJIT 2 和标准 Lua 5.1 解释器采用的是著名的 MIT 许可协议。正因为上述特色,因此 Lua 在游戏开发、机器人控制、分布式应用、图像处理、生物信息学等各类各样的领域中获得了愈来愈普遍的应用。其中尤以游戏开发为最,许多著名的游戏都有lua的身影
Lua 和 LuaJIT 的区别
Lua 很是高效,它运行得比许多其它脚本(如 Perl、Python、Ruby)都快,这点在第三方的独立测评中获得了证明。尽管如此,仍然会有人不知足,他们总以为"嗯,还不够快!"。LuaJIT 就是一个为了再榨出一些速度的尝试,它利用即时编译(Just-in Time)技术把 Lua 代码编译成本地机器码后交由 CPU 直接执行。LuaJIT 2 的测评报告代表,在数值运算、循环与函数调用、协程切换、字符串操做等许多方面它的加速效果都很显著。凭借着 FFI 特性,LuaJIT 2 在那些须要频繁地调用外部 C/C++ 代码的场景,也要比标准 Lua 解释器快不少。目前 LuaJIT 2 已经支持包括 i38六、x86_6四、ARM、PowerPC 以及 MIPS 等多种不一样的体系结构。
LuaJIT 是采用 C 和汇编语言编写的 Lua 解释器与即时编译器。LuaJIT 被设计成全兼容标准的 Lua 5.1 语言,同时可选地支持 Lua 5.2 和 Lua 5.3 中的一些不破坏向后兼容性的有用特性。所以,标准 Lua 语言的代码能够不加修改地运行在 LuaJIT 之上。LuaJIT 和标准 Lua 解释器的一大区别是,LuaJIT 的执行速度,即便是其汇编编写的 Lua 解释器,也要比标准 Lua 5.1 解释器快不少,能够说是一个高效的 Lua 实现。另外一个区别是,LuaJIT 支持比标准 Lua 5.1 语言更多的基本原语和特性,所以功能上也要更增强大。
2)应用场景
1. 在不少时候,咱们能够将Lua直接嵌入到咱们的应用程序中,如游戏、监控服务器等。这样的应用方式对于程序的最终用户而言是彻底透明的,可是对于程序自己,其扩展性将会获得极大的加强。
2. 将Lua视为一种独立的脚本语言,经过它来帮助咱们完成一些软件产品的辅助性工具的开发。好比在咱们以前的数据分析产品中,咱们经过编写Lua脚本,将每一个用户不一样格式的数据从新格式化为咱们的软件平台可以读取的格式,以后再将格式化的后的数据加载到数据库中,或者是写入咱们的分析引擎能够识别的数据分析文件中。这其中Lua仅仅用于文件格式的规格化过程,至于此后的操做,都是经过Lua调用咱们的C语言导出函数来完成的。
3. 将Lua应用于应用程序的动态配置部分。好比移动智能设备或嵌入式设备,它们的显示分辨率在不少状况下都是非标准的,若是咱们为每一款设备都维护一套相关的配置信息,这无疑会加大咱们程序的维护开销,若是咱们将这段动态配置逻辑交由Lua脚本完成,那么这对于程序配置的灵活性而言,将会获得很大的提升。甚至能够是这样,运行在移动终端设备上的应用程序,在启动主窗体以前先和服务器创建链接,在服务器确认设备的各类参数后,再将和该设备显示相关的Lua脚本发送给设备客户端,这样客户端在获得Lua脚本以后,就能够马上执行它以获得最新的动态配置信息。
3)主要优点
1. 高效性:
做为一种脚本语言,Lua的高效是众所周知的,所以在实际应用中,不少大型程序都会考虑将代码中易变的部分用Lua来编写。这不但没有明显下降系统的运行效率,反而使程序的稳定性和可扩展性获得了显著的提高。
2. 可移植性:
在官方网站中提供了基于多种平台的发布包,如Linux/Unix、Windows、Symbian和Pocket PC等。
3. 可嵌入性:
在语言设计之初,Lua就被准确的定位为嵌入式脚本语言,所以Lua的设计者们为Lua提供了与其余编程语言之间的良好交互体验,这特别体如今和C/C++之间的交互上。对于其余语言,如Java和C#,也能够将Lua做为其嵌入式脚本引擎,并在代码中进行直接的交互。
4. 简单强大:
尽管是过程化脚本语言,但因为Lua的设计者们为Lua提供了meta-mechanisms机制,这不只使Lua具有了一些基本的面向对象特征,如对象和继承,并且仍然保持了过程化语言所具备的语法简单的特征。
5. 小巧轻便:
在最新版本(5.2.0)的Lua中,仅仅包含了大约20000行的C语言代码,编译后的库文件大小约为240K左右,所以这对于不少资源有限的平台有着极强的吸引力。
6. 免费开源:
MIT Licence可让Lua被免费的用于各类商业程序中。
lua的经常使用数据类型简介
java
一)注释 单行注释 两个减号是单行注释: --注释内容 多行注释 --[[ 多行注释 多行注释 --]] 二)基本类型 Lua中有8个基本类型分别为: nil(空) -----> java null(空) boolean(布尔)、 number(数字) 双精度浮点数 ---> java int double float string(字符串) table(表) ----> 相似 java map function(函数)、 userdata(自定义的类型)、 thread(线程/协程) 使用type函数测试给定变量或者值的类型 三)变量 1)变量命名 大小写区分命名规则 Lua 标示符用于定义一个变量,函数获取其余用户定义的项。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。 _temp 通常约定,如下划线开头链接一串大写字母的名字(好比 _VERSION)被保留用于 Lua 内部全局变量。 关键词: and break do else elseif end false true for function if in local nil not or return then repeat until while 变量名字,它的大小写是相关的。也就是说,A和a是两个不一样的变量 定义一个变量的方法就是赋值。"="操做就是用来赋值的。 2)全局变量 在默认状况下,变量老是认为是全局的。除非,你在前面加上"local"。这一点要特别注意,由于你可能想在函数里使用局部变量,却忘了用local来讲明. 全局变量不须要声明,给一个变量赋值后即建立了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过获得的结果是:nil。 > print(b) nil > b=10 > print(b) 10 > 若是你想删除一个全局变量,只须要将变量赋值为nil。 b = nil print(b) --> nil 这样变量b就好像从没被使用过同样。换句话说, 当且仅当一个变量不等于nil时,这个变量即存在。 3)局部变量 变量名称 前加修饰符 local 四)nil类型 > print(type(a)) nil ------------------------- 对于全局变量和 table,nil 还有一个"删除"做用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉,执行下面代码就知: tab1 = { key1 = "val1", key2 = "val2" } for k, v in pairs(tab1) do print(k .. " - " .. v) end print('---------') tab1.key1 = nil for k, v in pairs(tab1) do print(k .. " - " .. v) end ----------------------------- 判断nil类型 做比较时应该加上双引号 ": type(X) ---> 返回的类型 实际上是string > type(X)==nil false > type(X)=="nil" true