【问题标题】:Why -l option in lua interpreter acts strangely?为什么 lua 解释器中的 -l 选项行为奇怪?
【发布时间】:2020-03-02 02:58:25
【问题描述】:

您可以通过将它们全部作为参数来执行一系列块 到独立解释器,使用 -l 选项。例如,如果 你有一个带有单个语句 x=1 的文件 a 和另一个带有 语句 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  Copyright (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  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 

为什么会打印出“a 的值为:true”?而不是“a的值是:1”? 非常感谢任何 cmets。

【问题讨论】:

  • 好问题!选项-lxx不仅会执行xx.lua,还会创建全局变量xx(与文件同名)并将块返回的值赋给这个变量。如果没有返回值,则使用值true
  • 尝试$ lua -i -e 'require"a";require"b"' 避免覆盖变量a
  • @EgorSkriptunoff 发布答案。其他人这样做会很奇怪(或尴尬!)。

标签: lua


【解决方案1】:

错误是因为您在文件a.lua 中使用了a = 1,这与a.lua 包含x = 1b.lua 包含print(x) 的示例不同。

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

这是因为选项-l name 等于name = require("name")。当 require 完成时,在没有返回任何结果的文件上,require 将返回 true

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

a = require("a") --this returning true after it completes
b = require("b") --this printing the value of `a` which will always be `true`

来源:

Similar question answered on Lua-Users: command-line -l option issue

Egor Skriptunoff's Comment on this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多