我们将 Lua
语言执行的每一段代码(例如:一个文件或交互模式下的一行)称为一个程序段( Chunk
),即一组命令或表达式组成的序列。
程序段既可以简单到由一句表达式构成(例如输出“Hello World”的示例),也可以由多句表达式和函数定义(实际是赋值表达式)组成。
程序段在大小上没有限制,事实上,由于 Lua
语言也可以被用作数据定义语言,所以几 MB
的程序段也很常见。 Lua
语言的解释器可以支持非常大的程序段。
除了将源码保存成文件外,我们也可以直接在交互模式( interactive mode
)下运行独立解释器( stand-alone interpreter
)。当不带参数的调用 lua
时,可以看到如下输出:
$ lua Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio >
此后,输入的每一条命令(例如: print "Hello World"
)都会在按下回车键后立即执行。我们可以通过输入 EOF
控制字符( End-Of-File
、 POSIX
环境下使用 Ctrl+D
、 Windows
环境下使用 Ctrl+Z
),或调用操作系统库的 exit函数
(执行 os.exit()
)退出交互模式。
从 Lua5.3
版本开始,可以直接在交互模式下输入表达式, Lua
语言会输出表达式的值。如下所示:
$ lua Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio > math.pi/4 0.78539816339745 > a=15 > a^2 225.0 > a+2 17
提示
在 Lua5.3
之前的老版本中,需要在表达式前加上一个等号,如下所示:
$ lua5.2 > a=15 > =a^2 225.0点击复制复制失败已复制
为了向下兼容, Lua5.3
也支持这种语法结构。
要以代码段的方式运行代码(不在交互模式下),那么必须把表达式包在函数 print
的调用中:
print(math.pi/4) a=15 print(a^2) print(a+2)
在交互模式下, Lua
语言解释器一般会把我们输入的每一行当做完整的程序块或表达式来解释执行。但是,如果 Lua
语言解释器发现我们输入的某一行不完整,那么它会等待直到程序块或表达式被输入完整后再进行解释执行。这样,我们也可以直接在交互模式下输入由很多行组成的多行定义。不过,对于这种较长的函数定义而言,将其保存成文件然后再调用独立解释器来执行通常更方便。
我们可以使用 -i
参数让 Lua
语言解释器在执行完指定的程序段后进入交互模式,如下所示:
$ lua -i prog
上述命令会在执行完文件prog中的程序段后进入交互模式,这对于调试和手工测试很有用。
另外一种运行程序段的方式是调用函数 dofile
,该函数会立即执行一个文件。测试一下,通过 vscode
打开一个工程,然后新建 lib1.lua
文件,填入如下内容:
function norm(x, y) return math.sqrt(x ^ 2 + y ^ 2) end function twice(x) return 2.0 * x end
进入交互模式,依次输入如下命令运行:
$ lua Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio > dofile("lib1.lua") > n=norm(3,4) > twice(n) 10.0
提示
函数 dofile
在开发阶段也非常有用。我们可以同时打开两个窗口,一个窗口中使用文件编辑器编辑代码(例如文件 prog.lua
),另一个窗口中使用交互模式运行 lua
语言解释器。当修改完成代码并保存后,只要在 lua
语言交互模式的提示符下执行 dofile("prog.lua")
就可以加载新代码了,然后就可以观察新代码的函数调用和执行结果了。当然, vscode yyds!