第一版是针对 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但也有一些差异。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还将帮助 支持 Lua 项目


1.4 – 独立解释器

独立解释器(也称为 lua.c,因为这是其源文件,或者称为 lua,因为这是其可执行文件)是一个小程序,允许直接使用 Lua。本节介绍其主要选项。

当解释器加载文件时,如果该行的开头是数字符号 (`#´),它将忽略该行的开头。该特性允许在 Unix 系统中将 Lua 用作脚本解释器。如果您以类似于以下内容的方式启动程序

    #!/usr/local/bin/lua
(假设独立解释器位于 /usr/local/bin),或
    #!/usr/bin/env lua
那么您可以直接调用程序,而无需显式调用 Lua 解释器。

lua 的用法是

    lua [options] [script [args]]
所有内容都是可选的。正如我们已经看到的那样,当我们在没有参数的情况下调用 lua 时,解释器将进入交互模式。

-e 选项允许我们在命令行中直接输入代码。例如,

    prompt> lua -e "print(math.sin(12))"   --> -0.53657291800043
(Unix 需要双引号来阻止 shell 解释括号。)正如我们之前看到的,-l 加载文件,-i 在运行其他参数后进入交互模式。因此,例如,调用
    prompt> lua -i -l a.lua -e "x = 10"
将加载文件 a.lua,然后执行赋值 x = 10,最后显示一个提示符进行交互。

只要定义了全局变量 _PROMPTlua 在交互时就会使用其值作为提示符。因此,您可以通过类似于以下内容的调用来更改提示符

    prompt> lua -i -e "_PROMPT=' lua> '"
     lua>
我们假设 "prompt" 是系统的提示符。在该示例中,外部引号阻止 shell 解释内部引号,而内部引号由 Lua 解释。更准确地说,Lua 接收以下命令来运行
    _PROMPT=' lua> '
它将字符串 " lua> " 赋值给全局变量 _PROMPT

在开始运行参数之前,lua 会查找名为 LUA_INIT 的环境变量。如果存在这样的变量,并且其内容为 @filename,那么 lua 将加载给定的文件。如果定义了 LUA_INIT 但其开头不是 `@´,那么 lua 假设它包含 Lua 代码并运行它。在配置独立解释器时,此变量为您提供了强大的功能,因为您可以在配置中充分利用 Lua 的强大功能。您可以预加载包,更改提示符和路径,定义自己的函数,重命名或删除函数,等等。

主脚本可以在全局变量 arg 中检索其参数。在类似这样的调用中

    prompt> lua script a b c
lua 在运行脚本之前创建包含所有命令行参数的表 arg。脚本名称进入索引 0;其第一个参数(示例中的 a)进入索引 1,依此类推。可能的选项进入负索引,因为它们出现在脚本之前。例如,在调用中
    prompt> lua -e "sin=math.sin" script a b
lua 如下收集参数
    arg[-3] = "lua"
    arg[-2] = "-e"
    arg[-1] = "sin=math.sin"
    arg[0] = "script"
    arg[1] = "a"
    arg[2] = "b"
通常,脚本仅使用正索引(示例中的 arg[1]arg[2])。