Lua 语言入门

基本介绍

lua(wiki  中文  官方社区:lua-users)是一门开源、简明、可扩展且高效的弱类型解释型脚本语言。
Lua 是用标准C语言编写的一种小巧的脚本语言,并以源代码形式开放。Lua 并没有提供强大的库,所以我们很少单独使用 Lua 去编写程序,其设计目的是为了嵌入其他应用程序中,比如嵌入 Cocos2d-x 游戏引擎或 Nginx 服务器,从而为应用程序提供灵活的扩展和定制功能。
由于其实现遵循C标准,它几乎能在所有的平台(windows、linux、OS X、Android、iOS、PlayStation、XBox、wii等)上运行。
 

参考 Lua: about

Lua语言特性

  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 环境安装
  • 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 元表(Metatable)

  • Metatable是保存table的meta信息的1个表,通过设置里面的不同key value,可以定义这个table的一些特性
  • __index啥东西,什么作用呢?
    • 如果出现了文昌塔
  • set metatable有什么用呢?
  • .和:的function有什么区别的呢?
  • 参考资料

单元测试

  • Applet ut & cov 开发者指引
    • 单元测试: luaUnit单元测试框架
    • 覆盖率: luacov覆盖率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值