一、基础知识:
1. 第一个程序和函数:
在目前这个学习阶段,运行Lua程序最好的方式就是通过Lua自带的解释器程序,如:
/> lua
> print("Hello World")
Hello World
</div>
这样我们就可以以交互性的方式输入lua代码,并立即得到执行结果了。对于代码块较少的测试程序来说,这种方式确实是非常方便的,然而对于相对复杂的程序而言,这种方式就不是很合适了。如果是这样,我们可以将Lua代码保存到一个独立的Lua程序文件中,之后再通过Lua解释器程序以命令行参数的形式执行文件中的Lua代码。如我们将下面的Lua代码保存到test.lua的文件中:
function fact(n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
print("Enter a number:")
a = io.read("*number")
print(fact(a))
</div>
/> lua D:/test.lua
Enter a number:
4
24
</div>
2. 代码规范:
1). Lua的多条语句之间并不要求任何分隔符,如C语言的分号(;),其中换行符也同样不能起到语句分隔的作用。因此下面的写法均是合法的。如:
a = 1
b = a * 2
a = 1;
b = a * 2;
a = 1; b = a * 2;
a = 1 b = a * 2
</div>
2). 通过dofile()方法引用其他Lua文件中的函数,如:
function fact(n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
</div>
将上面的函数保存到test2.lua文件中。
/> lua
> dofile("d:/test2.lua")
> print(fact(4))
24
</div>
3). 词法规范。
和大多数其它语言一样,在声明变量时,变量名可以由任意字母、数字和下划线构成,但是不能以数字开头。在Lua中还有一个特殊的规则,即以下划线(_)开头,后面紧随多个大写字母(_VERSION),这些变量一般被Lua保留并用于特殊用途,因此我们在声明变量时需要尽量避免这样的声明方式,以免给后期的维护带来不必要的麻烦。
Lua是大小写敏感的,因此对于一些Lua保留关键字的使用要特别小心,如and。但是And和AND则不是Lua的保留字。
4). Lua中的注释分为两种,一种是单行注释,如:
--This is a single line comment.
另外一种是多行注释,如:
--[[
This is a multi-lines comment.
--]]
</div>
3. 全局变量:
在Lua中全局变量不需要声明,直接赋值即可。如果直接访问未初始化的全局变量,Lua也不会报错,直接返回nil。如果不想再使用该全局变量,可直接将其置为nil。如:
/> lua
> print(b)
nil
> b = 10
> print(b)
10
> b = nil
> print(b)
nil
</div>
4. 解释器程序:
命令行用法如下:
lua [options] [lua-script [arguments] ]
该工具的命令行选项主要有以下3个:
-e: 可以直接执行命令行中Lua代码,如:lua -e "print(\"Hello World\")"
-l: 加载该选项后的Lua库文件,如:lua -l mylib -e "x = 10",该命令在执行之前先将mylib中的Lua代码加载到内存中,在后面的命令中就可以直接使用该文件中定义的Lua函数了。
-i: 在执行完指定的Lua程序文件之后,并不退出解释器程序,而是直接进入该程序的交互模式。
在解释器程序的交互模式下,我们可以通过在表达式前加等号(=)标识符的方式直接输出表达式的执行结果。通过该方式,我们可以将该程序用于计算器,如:
/> lua
> = 3 + 1 + 4
8
</div>
该小节最后需要介绍的是lua脚本的命令行参数访问规则。如:
/> lua lua-script.lua a b c
</div>
在该脚本的程序入口,lua解释器会将所有命令行参数创建一个名为arg的table。其中脚本名(lua-script.lua)位于table索引的0位置上。它的第一个参数(a)则位于索引1,其它的参数以此类推。这种索引方式和C语言中读取命令行参数的规则相同。但是不同的是,Lua提供了负数索引,用以访问脚本名称之前的命令行参数,如:
arg[-1] = lua
arg[0] = lua-script.lua
arg[1] = a
arg[2] = b
arg[3] = c
</div>
二、类型与值:
Lua是一种动态类型的语言。其语言本身没有提供类型定义的语法,每个值都“携带”了它自身的类型信息。在Lua中有8中基础类型,分别是:nil、boolean、nu

