第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些区别。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还将帮助支持 Lua 项目。
Lua 中的编程 Lua | ||
第一部分。语言 第 1 章。入门 |
Lua 执行的每段代码(例如文件或交互模式中的单行)都是一个块。更具体地说,块只是一系列语句。
分号可以跟在任何语句后面。通常,我仅使用分号来分隔写在同一行中的两个或更多个语句,但这只是一种约定。换行在 Lua 语法中不起作用;例如,以下四个块都是有效且等效的
a = 1 b = a*2 a = 1; b = a*2; a = 1 ; b = a*2 a = 1 b = a*2 -- ugly, but valid
块可以像“hello world”示例中一样简单,也可以由语句和函数定义(实际上是赋值,我们稍后会看到)的混合组成,例如阶乘示例。块可以任意大。由于 Lua 也用作数据描述语言,因此几个兆字节的块并不少见。Lua 解释器对大尺寸没有任何问题。
您可以运行独立解释器以交互模式运行,而不是将程序写入文件。如果您在没有任何参数的情况下调用 Lua,您将获得其提示
Lua 5.0 Copyright (C) 1994-2003 Tecgraf, PUC-Rio >此后,您键入的每个命令(例如
print "Hello World"
)都会在您按 <enter>
后立即执行。要退出交互模式和解释器,只需键入文件结尾(Unix 中的 ctrl-D
,DOS/Windows 中的 ctrl-Z
),或从操作系统库中调用 exit
函数(您必须键入 os.exit()<enter>
)。
在交互模式下,Lua 通常将您键入的每一行解释为一个完整的块。但是,如果它检测到该行不能形成一个完整的块,它将等待更多输入,直到它有一个完整的块。当 Lua 等待行续行时,它会显示一个不同的提示(通常为 >>
)。因此,您可以直接在交互模式下输入多行定义,例如 factorial
函数。然而,有时将此类定义放在文件中并调用 Lua 来运行该文件会更方便。
您可以通过使用 -l
选项将它们全部作为参数传递给独立解释器,来执行一系列块。例如,如果您有一个包含单个语句 x=1
的文件 a
和另一个包含语句 print(x)
的文件 b
,则命令行
prompt> lua -la -lb将在
a
中运行块,然后在 b
中运行块,这将打印预期的 1。(-l
选项实际上调用 require
,它在特定路径中查找文件。因此,如果此路径不包含当前目录,则前一个示例将不起作用。我们将在 第 8.1 节 中更详细地讨论 require
函数。)
你可以使用 -i
选项指示 Lua 在运行给定块后启动交互式会话。类似这样的命令行
prompt> lua -i -la -lb将在
a
中运行块,然后在 b
中运行块,然后提示你进行交互。这对于调试和手动测试特别有用。在本章的末尾,我们将看到独立解释器的其他选项。
链接块的另一种方法是使用 dofile
函数,它会立即执行一个文件。例如,你可能有一个文件 lib1.lua
-- file 'lib1.lua' function norm (x, y) local n2 = x^2 + y^2 return math.sqrt(n2) end function twice (x) return 2*x end然后,在交互模式中,你可以键入
> dofile("lib1.lua") -- load your library > n = norm(3.4, 1.0) > print(twice(n)) --> 7.0880180586677
在测试一段代码时,dofile
函数也很有用。你可以使用两个窗口:其中一个是带有你的程序的文本编辑器(例如,在文件 prog.lua
中),另一个是在交互模式下运行 Lua 的控制台。在你对程序进行修改并保存后,你在 Lua 控制台中执行 dofile("prog.lua")
以加载新代码;然后你可以练习新代码,调用其函数并打印结果。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |