在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
学习 Lua 对于了解 Javascript 的人来说就是小菜一碟,Tyler Neylon 写了三篇文章来解释其中的原因,这是其中的第一篇。 这是通过 Javascript 来学习 Lua 系列文章的第一篇,一共有三篇,第二篇和第三篇。 Lua 是一门优雅的,可移植的,高效的并且异常灵活的语言。所有能够编译 C 语言的操作系统都能运行 Lua,这是一些跨平台的框架,比如 Corona SDK 和 Love game engine,选择 Lua 的原因。Lua 的运行速度很快,足够用来开发游戏——愤怒的小鸟的最初是用 Lua 编写的。 Lua 能和其他的语言很好的融合在一起,它作为脚本语言,在 Adobe lightroom 项目中有出色的表现。我认为 Lua 的设计很优美,用起来也非常的舒服。 对于已经了解 Javascript 的人而言,学习 Lua 是非常简单的,因为Lua 和 Javascript 有很多的共同点。在学习的过程中,我们可以通过这些共同点很快的熟悉 Lua,但需要注意两者间一些关键性的不同的地方。 通过 Javascript 的相关知识学习 Lua 的系列总共三篇,这是其中的第一篇。这篇文章中包含一些基础概念:安装 Lua,变量,数据类型,操作符和表达式。第二篇将会涉及流程控制和数据结构,第三篇讲解对象相关的一些知识。 文章中出现的 Javascript 代码大多都遵循 2009 年制定的 EACMScript 5 标准,也就是 ES5 标准。现在最新的 Javascript 标准的是 ES6 或者称为 ES2015。我会用到一些 ES6 的语法,并指出这是 ES6 的特性,这样读者就能知道这段 Javascript 代码遵循的标准。不过读者并不需要了解 ES6,我也不会对用到的 ES6 特性进行解释。 运行 Lua官方安装指南传送门。 在 Max OSX 和 Linux 上通过编译源码的方式安装 Lua 很简单,执行下面的 shell 命令。如果是 Max OS X,把最后一行的 linux 替换为 macosx 。
安装完成后,就可以使用 lua 命令了,运行 lua 应该看到以下输出。
任意一个文本编辑器都能用来写 Lua 脚本,写一段代码保存为 my_file.lua,执行 Lua 脚本类似 node.js 执行 Javascript 脚本,使用命令就好了。
注释,空格和分号Lua 中的多行注释的以
Lua 会忽略缩进。一般的空格也会被忽略,但是会保留字符串的空格和单行注释后面的空白行。行尾的分号可写可不写,一般而言不用写。 变量和作用域和 Javascript 一样, Lua 的变量是动态类型的,也使用垃圾回收器管理内存。多数的 Lua 变量类型都能在 Javascript 中找对应的类型。
It's handy to classify boolean values in term of falsiness; a value is called falsy when it evaluates to false to a boolean context; Lua 中仅有的假值是 nil 和 false。类似地在 Javascript 中, Lua 的 直观的来看,如果 Lua 的
类似 Javascript 中的
Lua 中 function 是一等公民——可以创建匿名函数,把函数赋值给变量,也可以把函数当作另一个函数的参数或者返回值。如果在函数中引用了定义在该函数作用域之外的自由变量,将隐式地形成一个闭包(译者注:和 Javascript 中的闭包很类似)。同时 Lua 中的函数支持高效的尾递归,也就是在函数的结尾调用另一个函数,调用栈不会增加。 Lua 中还有两个类型 userdata 和 thread。userdata 是使用 Lua 的 C 语言 API 调用 C 语言生成的对象。userdata 就像一个拥有私有数据的 table,也可以自定义它的行为。 Lua 的 thread 是一个 coroutine,允许函数使用 yield 一些值并保持自身的栈和内部状态。 作用域和可变性Lua 中变量的作用域默认是全局作用域。Lua 的
Lua 中没有常量或者私有变量。不过可以像 Javascript 中一样,使用闭包来模拟私有变量。创建一个函数,在函数中引用定义在函数之外的变量,这就使得这些变量在函数之外不可见,达到类似私有变量的效果。 Lua 的函数相关内容将在下一篇文章中涉及。 操作符和表达式Lua 和 Javascript 中的数学运算,像是加法和乘法,基本上是一样的。两者都提供了获取余数的操作
Javascript 不支持操作符重载,但是 Lua 支持。Lua 通过一种称为 metamethods(修改元数据) 特殊函数实现的重载,这部分内容将会在最后一篇文章中解释。Javascript 有一个三元操作符,但 Lua 中并没有,不过在 Lua 中能实现类似的效果,这需要借助 Lua 中的短路操作符 or 和 and。
这个实现很有效除非 valueOnTrue 是假值。大部分情况下都不会有问题因为 Lua 的数字,字符和表不会被当作假值。 比较在 Javascript 中被广泛认同的的一个最佳实践是使用 Lua 只有
Lua 的 位操作符Lua 5.3 引入了内置的位操作符,见下表。表中的操作符在 Lua 和 Javascript 中都可用。
Lua 中的
Javascript 中区分了 >> 和 >>> 操作符, >> 保持符号而 >>> 使用 0 填充。Lua 中的 >> 就像 Javascript 中的 >>> 的操作符,使用 0 来填充空位。 这篇文章包含了一下基础知识,运行 Lua并理解 Lua 中的数据类型和表达式。下一篇文章将会包含更多的内容,比如Lua 的流程控制关键字,函数和很重要的 table。
微信搜索【水勺子】关注我,获取更多详细信息
|
请发表评论