http://blog.csdn.net/suxinpingtao51/article/details/8508428

lua最著名的应用要数魔兽争霸了,但是具体怎那么用的却不知道,实在惭愧。相对于其他语言,它最大的特点可能就是嵌入式了。其次offical的网站说是所有脚本语言里最快的,但是这也是以简单为代价的,语言简单了自然就快了,但是要实现某些功能就要写更多的代码了。再就是诸如可移植之类的就没什么好说的了,大多数脚本语言都能跨平台。似乎lua不是linux标配,但是安装比较简单,make一下就行了。

所有脚本语言的相似点:

1.基本都是以文本形式存在;

2.只需要解释,就可以直接执行,而不需要编译执行,所以可以快速开发程序的目的(这也是这种语言产生的背景);

3.脚本中的变量都是无类型的,即一个变量不需要声明类型,只需要直接赋值,它既可以是字符串,也可以是整型等类型;

不同点:

脚本语言现在没有通用性,一种脚本语言可能对应一种专门的程序开发语言解释器;

在这吐槽下的是有些脚本语言版本更新后,前后变动大,导致怨声载道!

lua的初衷本就是是作为一个嵌入式语言,为了这个目的,它的一切都是减无可减,拿来写大点儿的东西,就会感觉老是要自己发明轮子。比如,python方便好用的slice操作,lua就没有。

python 3的好处就是轮子基本上都发明好了,而且语言本身也有一堆语法糖让你用起来方便快捷。

但是如果项目需要一个嵌入式脚本引擎的话,我还是会选择lua的。所以lua和python基本上应用领域不冲突,有需要的话,俩都学其实也不错,并不用费多少功夫。ruby才是python的直接竞争对手。

为什么要使用脚本语言开发?

最主要有两条:

1.用它开发快捷和高效,如相同的功能用Python 50行代码,用C++也许要500行,用Java也许要200行;

2.python又可以叫作胶水语言,可以把C++、Java写的模块轻松粘到起来一协同工作;如Python写的模块,用Java或C++也能够非常方便的调用,反过来调用也可以;

买了本lua程序设计,准备对比python学lua,下面写点东西记录一下:

第一章:

1.1 程序块:

lua不是以缩进区分程序块的,这和python有很大区别,lua以end结束一个程序块。

1.2 词法规范:

没什么好说的,C为单行注释,python里单行注释用#,lua的多行注释以C[[开头,]]结尾,注意第一个C和后面的[[没有空格,python里没有多行注释,如果需要多行注释一般使用三引号。

1.3 全局变量:

lua和python一样,变量都不需要声明,直接赋值就可以了,但是删除的时候有点区别,lua用nil赋值变量达到删除变量的目的,而python用del调用来删除变量或者把变量赋值None。

1.4 解释器程序:

没什么可对比的,都有交互的解释器,用于语言的学习不错。lua的解释器启动的时候有几个参数,-e后面接要执行的code,这个mysql的-e参数一样,-i是运行完code之后进入交互模式,还有一个环境变量来_PROMPT保存提示符。

lua的命令行参数用arg来引用,可以使用负索引,0是文件本身,python使用sys.argv存储命令行参数,和lua一样,0表示文件本身,但是不可以使用负索引。第二章:

2.1 nil:

lua中变量有两种状态,非nil状态和nil状态,未定义以前都是nil,python只有定义了才能用。nil在lua中表示一切异常值,python用None表示。

2.2 boolean:

lua里只有false和nil是假,其他一概为真,这个python有区别,python里空串和空list都算假。

2.3 number:

lua里只有浮点数,没有证书类型,python里区分int和float。

2.4 string:

lua和python一样,不能修改字符串,值能创建新的字符串,lua里多行字符串使用[[和]],这里还有一个小技巧,在两个[[之间加入等号,后面再的两个]]在放入数量相同的等号,可以匹配,这是为了避免字符串里出现[[和]],python里多行字符串使用三引号。lua里字符串和数字会自动转换,python不能自动转换,要转换需要调用函数。lua里使用#操作符取长度,python使用len()。lua中字符串链接使用..,python使用加号。

2.5 table:

lua里的table和python里的dict比较像,使用方法类似,需要注意的是#取table长度的时候,不能有"空洞”,否则可能取到的不是期望值。另外需要注意的一个重要缓解是,lua中默认以1为索引的开始,而python是从0开始的,这个区别非常重要,lua里很多默认函数的实现也依赖于这个默认约定,所以学lua的时候最好注意索引的起点。

2.6 function:

lua里function和普通变量一样对待,python里则把一切看作对象。

2.7 userdata和thread:

后面有详细说明,在此先不做说明。