如何在交互式lua或torch会话中正确地要求lua软件包?

我在安装和要求包的过程中遇到了困难。例如,对于 inspect.lua 包,我首先按照包中的指示通过 luarocks 进行安装(https://github.com/kikito/inspect.lua):

luarocks install inspect

然后,如果我启动 lua 或 torch7 (th), 我将通过以下方式要求它:

local inspect = require 'inspect'

这个检查变量总是 nil:

require 'inspect'; print(inspect)

返回 nil

最初,我不确定它是否返回 nil,所以当我尝试使用 inspect(1) 时,我会收到错误“尝试调用全局‘inspect’(一个空值)”。

使用 torch,似乎我可以成功使用“import 'inspect'”,尽管我不确定为什么它起作用而要求不起作用。

我做错了什么?

点赞
用户752976
用户752976

Lua解释器按块运行。每个块都被视为一个单独的执行集。因此,如果您写入:

local a = 5
local b = a

在一个文件中,它会正确将“b”设置为5,因为lua文件被视为一个大块。然而,在REPL中,第一行本地变量后,本地变量将被清除。

这意味着您要么应将您的代码强制置于一个块中:

do local inspect = require 'inspect'; print(inspect) end

要么使用在块之间执行时仍保留的全局变量:

$ inspect = require 'inspect'
$ print(inspect)

译者注:REPL,Read-Eval-Print Loop,即交互式解释器。

2015-10-15 18:03:24