基本介绍
lua(wiki 中文 官方社区:lua-users)是一门开源、简明、可扩展且高效的弱类型解释型脚本语言。
Lua 是用标准C语言编写的一种小巧的脚本语言,并以源代码形式开放。Lua 并没有提供强大的库,所以我们很少单独使用 Lua 去编写程序,其设计目的是为了嵌入其他应用程序中,比如嵌入 Cocos2d-x 游戏引擎或 Nginx 服务器,从而为应用程序提供灵活的扩展和定制功能。
由于其实现遵循C标准,它几乎能在所有的平台(windows、linux、OS X、Android、iOS、PlayStation、XBox、wii等)上运行。
参考 Lua: about
Lua语言特性
- 高效性: 作为一种脚本语言,Lua的高效是众所周知的,因此在实际应用中,很多大型程序都会考虑将代码中易变的部分用Lua来编写。这不但没有明显降低系统的运行效率,反而使程序的稳定性和可扩展性得到了显著的提升。
- 可移植性: 在官方网站中提供了基于多种平台的发布包,如Linux/Unix、Windows、Symbian和Pocket PC等。
- 可嵌入性: 在语言设计之初,Lua就被准确的定位为嵌入式脚本语言,因此Lua的设计者们为Lua提供了与其他编程语言之间的良好交互体验,这特别体现在和C/C++之间的交互上。对于其他语言,如Java和C#,也可以将Lua作为其嵌入式脚本引擎,并在代码中进行直接的交互。
- 简单强大: 尽管是过程化脚本语言,但由于Lua的设计者们为Lua提供了meta-mechanisms机制,这不仅使Lua具备了一些基本的面向对象特征,如对象和继承,而且仍然保持了过程化语言所具有的语法简单的特征。
- 小巧轻便: 在最新版本(5.2.0)的Lua中,仅仅包含了大约20000行的C语言代码,编译后的库文件大小约为240K左右,因此这对于很多资源有限的平台有着极强的吸引力。
- 免费开源: MIT Licence可以让Lua被免费的用于各种商业程序中。
常用资料
- Lua官网: The Programming Language Lua
- Lua官方推荐文档: Lua: documentation
- 在线快速教程
-
- Lua 教程_w3cschool: 中文,有在线IDE,排版等各方面更加美观易用
- Lua 教程 | 菜鸟教程: 中文,有在线IDE
- 在线IDE: 菜鸟教程在线编辑器
- 参考书籍
-
- 完整语法参考文档 Lua Reference Mannual: Lua 5.4 Reference Manual - contents
- 深入学习LUA: Programming in Lua (first edition)
开发环境配置
- Lua 环境安装
- Lua好用的IDE推荐?
-
- IntelliJ IDEA + EmmyLua 插件
- VS Code + LuaIde 插件
- 参考
Lua语法
- Lua的代码规范是有什么?
-
- 可选
- 线程跟协程的区别?
-
- 协程就是协程,不是线程。CPU执行单位是线程,不是什么协程。协程,是同步执行,不是并行,只是切了一个上下文了,为你保存原来的上下文而已。切到第二个协程时,原来的协程处于挂起状态。这个特指lua的协程。Unity的协程也是这么回事
- 参考 Lua 协程和线程区别 - 御風ゝ - 博客园
- Lua 变量
-
- 全局变量和局部变量发生了冲突怎么办呢?
- 如果发生冲突,在局部代码块里面,局部变量是默认可见的,全局变量是默认被可见的。
- 如果需要在局部代码块里面,访问一个有命名冲突的全局变量,可以加上ENV或G来进行引用
- 参考
- Lua 迭代器
-
- paris和ipairs的区别是什么?
-
-
- pairs会遍历table的所有键值对。而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。顺便说下,记忆也很简单,带i的就是根据integer key值从1开始遍历的。
- 参考: 【Lua】Lua中ipair和pair的区别 - 秋乡暮雨 - 博客园
-
-
- 无状态迭代器和有状态迭代器有什么区别呢?
-
-
- Lua支持用户自己实现迭代器。
- 无状态迭代器和有状态迭代器的区别在于,有状态迭代器使用闭包的方式来封装迭代的状态,而无状态迭代器使用了状态常量和控制变量来进行保存状态。
-
- Lua table(表)
-
- 对于关联数组,非数字的下标是如何确定的?
- 对于没有写下标的元素,会自动分配下标,分配的规则是从1开始计数,每次累加1. 如果则某个下标已经被显示分配了,那么会负责之前相同的下标的值。
- 比如说 tb = {"oh", "my", [3] = "god", "hello"},输出的是{1: oh, 2: my, 3: hello}
- next(data)
- Lua 模块与包
-
- Lua加载C库的时候,头文件是如何加载的呢?
- Lua自己有提供 loadlib等函数,方便进行加载C库相关的函数。参考
-
- 同时LuaJIT有提供拓展库比如说FFI,来支持更加方便地加载C库。参考
- Lua 协同程序 (Coroutine)
-
- resume和yield的配合强大之处在于,resume处于主程中,它将外部状态(数据)传入到协同程序内部;而yield则将内部的状态(数据)返回到主程中。
- resume的参数中,除了第一个参数,剩下的参数将作为yield的参数
- 包管理器
-
- Lua Rock包管理器: 教你使用luarocks来创建rock包 - SegmentFault 思否
Lua 元表(Metatable)
- Metatable是保存table的meta信息的1个表,通过设置里面的不同key value,可以定义这个table的一些特性
- __index啥东西,什么作用呢?
-
- 如果出现了文昌塔
- set metatable有什么用呢?
- .和:的function有什么区别的呢?
- 参考资料
单元测试
- Applet ut & cov 开发者指引
-
- 单元测试: luaUnit单元测试框架
- 覆盖率: luacov覆盖率