这几天系统地学习了一下Lua这个脚本语言,Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,这是多么地变态啊(/bin/sh都要1M,MacOS平台),而且能和C语言非常好的互动。我很好奇得浏览了一下Lua解释器的源码,这可能是我看过最干净的C的源码了。
我不想写一篇大而全的语言手册,一方面是因为已经有了(见本文后面的链接),重要的原因是,因为大篇幅的文章会挫败人的学习热情,我始终觉得好的文章读起来就像拉大便一样,能一口气很流畅地搞完,才会让人爽(这也是我为什么不想写书的原因)。所以,这必然又是一篇“入厕文章”,还是那句话,我希望本文能够让大家利用上下班,上厕所大便的时间学习一个技术。呵呵。
相信你现在已经在厕所里脱掉裤子露出屁股已经准备好大便了,那就让我们畅快地排泄吧……
运行
首先,我们需要知道,Lua是类C的,所以,他是大小写字符敏感的。
下面是Lua的Hello World。注意:Lua脚本的语句的分号是可选的,这个和GO语言很类似。
1
|
print( "Hello World" ) |
你可以像python一样,在命令行上运行lua命令后进入lua的shell中执行语句。
1
2
3
4
5
|
chenhao-air:lua chenhao$ lua Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio > print( "Hello, World" ) Hello, World > |
也可以把脚本存成一个文件,用如下命令行来运行。
1
|
>lua file .lua |
或是像shell一样运行:
1
2
3
4
5
6
|
chenhao-air:lua chenhao$ cat hello.lua #!/usr/local/bin/lua print( "Hello, World" ) chenhao-air:lua chenhao$ chmod +x hello.lua chenhao-air: test chenhao$ . /hello .lua Hello, World |
语法
注释
1
|
-- 两个减号是行注释 |
1
2
3
4
|
--[[ 这是块注释 这是块注释 --]] |
变量
Lua的数字只有double型,64bits,你不必担心Lua处理浮点数会慢(除非大于100,000,000,000,000),或是会有精度问题。
你可以以如下的方式表示数字,0x开头的16进制和C是很像的。
1
2
3
4
5
6
7
|
num = 1024 num = 3.0 num = 3.1416 num = 314.16e-2 num = 0.31416E1 num = 0xff num = 0x56 |
字符串你可以用单引号,也可以用双引号,还支持C类型的转义,比如: ‘a’ (响铃), ‘’ (退格), ‘f’ (表单), ‘ ’ (换行), ‘ ’ (回车), ‘ ’ (横向制表), ‘v’ (纵向制表), ‘\’ (反斜杠), ‘”‘ (双引号), 以及 ‘” (单引号)
下面的四种方式定义了完全相同的字符串(其中的两个中括号可以用于定义有换行的字符串)
1
2
3
4
5
|
a = 'alo
123"' a = "alo
123"" a = '97lo10 4923"' a = [[alo 123"]] |
C语言中的NULL在Lua中是nil,比如你访问一个没有声明过的变量,就是nil,比如下面的v的值就是nil
1
|
v = UndefinedVariable |
布尔类型只有nil和false是 false,数字0啊,‘’空字符串(’