2015-10-15 1 views
2

У меня возникли трудности с установкой и требованием пакетов в целом. Например, для пакета inspect.lua, я сначала установить через luarocks, как указано в пакете (https://github.com/kikito/inspect.lua):Как правильно установить пакеты lua с помощью интерактивной сессии lua или факела?

luarocks install inspect 

Тогда, если я начну либо lua или torch7 (th), я тогда потребуется его с помощью:

local inspect = require 'inspect' 

Это инспектировать переменную всегда nil:

require 'inspect'; print(inspect) 

возвращается 0.

Первоначально, я не был уверен, что он возвращал nil, поэтому, когда я попытался бы, например, inspect(1) Я бы получил ошибку «попытка вызвать глобальный« проверка »(значение nil)».

Использование факела, похоже, я могу успешно использовать «import» для проверки », хотя я не уверен, почему это работает и требует этого.

Что я делаю неправильно?

+0

Что 'требует«инспектировать»; распечатать (проверить) 'output? –

+0

Он возвращает 'nil'. – Jonathan

+4

Когда вы вводите код Lua в интерактивном сеансе, вы должны оставить «local» (или окружить весь ваш код «do ... end»). – siffiejoe

ответ

3

Кредит для определения того, что составляет @siffiejoe.

Lua-интерпретатор работает в блоках. Каждый блок рассматривается как отдельный набор выполнения. Таким образом, если вы напишете:

local a = 5 
local b = a 

В файле, он будет правильно установлен b равным 5, потому что файл Lua рассматривается как один большой блок. В REPL, однако, после первой строки локальные переменные очищаются.

Это просто означает, что вы либо должны заставить свой код в один блок:

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

Или использовать глобальную переменную, которая сохраняется по блочные расстрелов:

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

Мне было интересно, почему это не дало ошибку, это дает понять. – Jonathan

Смежные вопросы