前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lua 挺好用的样子

Lua 挺好用的样子

作者头像
owent
发布2018-08-01 16:41:45
1.1K0
发布2018-08-01 16:41:45
举报
文章被收录于专栏:owent

项目里面引入了Lua,就特别学习了一下。

其实对于理解Javascipt的人来说,Lua也很容易理解,因为他们太多的地方相像了。

初步看来,Lua的设计模式和思想很像Javascript,也是原型模型(Javascript里叫prototype,Lua里是metatable

为了便于理解并且更快上手,特意整理出Lua和Javascript的一些异同

核心和规范:

  1. Lua里有个Table类型,类似Javascript的Object,里面可以放各种动态类型
  2. 都支持词法定界,所以都支持构造闭包。Lua的词法定界使用了upvalue引用的方式,垃圾回收主要是标记删除法
  3. Javascript在数据溢出是会自动扩充到64位整型,Lua貌似是不支持64位整数。不过Javascript的64位整数的位操作也有点问题。
  4. Javascript的最外层对象是window(浏览器)和global(Node.js),Lua是_G
  5. Lua获取执行环境用得的debug模块的功能据官方文档说比较耗性能,Javascript可以直接通过arguments对象来拿到
  6. Lua和Javascript一样只提供常规操作。Lua可以操作文件、字符串、数学运算、IO和很基础的系统API。复杂的功能如正则表达式啊什么的,需要通过外部接口导入来使用

语法和设计模式:

  1. Lua神奇的地方是所有的东西都是多元组,并且用逗号隔开。比如 for key, value in pairs(…) do end; a, b = b, a和 a,b,c = c,a,b等等。这里 key,value和a,b和a,b,c都是多元组
  2. 和Javascript一样,都支持语句尾部的分号自动补全。但是区别是,Javascript只能在换行符的地方补全;Lua没这种限制可以在任意处补全。但是Lua的限制是不能有空语句块,所以;;是不合法的
  3. Lua支持操作符和一些内部操作函数的重载,方式是定义加两个下划线__加名字的函数,比如加法操作符 __add。(详见: http://www.lua.org/manual/5.1/manual.html#2.8
  4. 虽然都是原型模型,但是Javascript默认的查找符号的行为就是向上查原型链,而lua默认是只查找本层。不过可以简单得重设__index接口来实现这一特性
  5. 利用Javascript实现携程比较容易,可以通过各种匿名回调函数,Lua更简单,直接提供了携程模块。
  6. Lua为Table声明函数可以Name.FuncName或者Name:FuncName,后一个和前一个的区别是后一个默认多加了一个self参数。可以以此和前面的metatable来模拟多态特性

工具和外部支持:

  1. Lua嵌入其他语言比较简单。因为Lua的调用是栈式的,不过代码写起来不怎么美观。有很多工具提供了Lua和其他语言的交互接口抽象代码生成工具,如swig、tolua、tolua++等等。Javascript的稍微麻烦点,但是Javascript的交互代码看起来比较漂亮,特别是Node.js内用V8引擎然后写C++插件(详见:http://nodejs.org/api/addons.html)。也十分简单。
  2. Lua有jit可以编译后执行,Javascript就比较惨一点。所以很多本地代码里嵌入Lua而不是Javascript来方便变更同时又保证高效。不过据说Mozilla的Asm.js提取出了Javascript的子集,然后用AOT编译+运行时优化技术,可以和本地应用匹敌的性能,这个没研究过不敢乱说
  3. Javascript的调试工具很成熟也很上流啊,各类浏览器,用Node.js的话还可以远程调试。Lua的就悲剧了…

这里有别人对Lua和Javascript做出的一些些个比较分析,可以参考一下:http://blog.artyyouth.com/?p=120

暂时也就总结出这么多了,以后用得过程中如果有新的发现再往这里放吧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心和规范:
  • 语法和设计模式:
  • 工具和外部支持:
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档