为什么在lua解释器中使用-l选项会表现奇怪?

你可以通过 -l 选项将多个片段作为参数传递给独立解释器来执行。例如,如果你有一个名为 a 的文件,其中只有一个语句 x=1,并且另一个文件 b 中有语句 print(x),那么命令行

> prompt> lua -la -lb

将运行 a 中的片段,然后运行 b 中的片段,打印出预期的 1。

上述内容来自下面的链接:https://www.lua.org/pil/1.1.html。然而,在我尝试执行时,我得到了语法错误。

因此,在文件 a.lua 中,我只有一行代码:a=1。然后在文件 b.lua 中,我也只有一行代码:print("the value of a is:",a)。然后,

:~$ lua -i -la -lb
Lua 5.2.4  版权所有 (C) 1994-2015 Lua.org, PUC-Rio
the value of a is:  true
>
:~$

:~$ lua -la -lb
the value of a is:  true
Lua 5.2.4  版权所有 (C) 1994-2015 Lua.org, PUC-Rio
>

为什么输出的是“the value of a is: true”,而不是“the value of a is: 1”?欢迎留言讨论。

点赞
用户7396148
用户7396148

错误是因为你在文件 a.lua 中使用了 a = 1,不像示例中 a.lua 包含 x = 1b.lua 包含 print(x)

使用 a 而不是 x 意味着你正在使用相同的 a 变量,在 -la 完成时被写入并将其更改为 true

这是因为选项 -l name 等同于 name = require("name")。当 require 完成时,对于不返回结果的文件,require 将返回 true

你的命令 lua -la -lb 在 Lua 中看起来像这样:

a = require("a") -- 这将在完成后返回 true
b = require("b") -- 这将打印 `a` 的值,它将始终是 `true`

来源:

在 Lua-Users 上回答的类似问题:命令行 -l 选项问题

Egor Skriptunoff 在此问题上的评论

2020-01-08 23:59:38