Нет.Это совсем не так.
Интерпретатор Lua предоставляет одну глобальную таблицу, обычно называемую _G, если вы не делаете что-то странное.
function printthis()
print(var)
end
В действительности это означает
_G.printthis = function()
_G.print(_G.var);
end
И ваш код в main равен
local module = _G.require("module")
local var = "I should be global?"
_G.printthis()
Но когда вы звоните printthis
- где же был установлен _G.var
?Нигде.Таким образом, переменная равна nil, как и все другие обращения к таблице, где нет ничего по этому ключу.
Это может быть неудобно, но это - намного лучшая идея в долгосрочной перспективе, чтобы пройтиаргументы, чем устанавливать глобальные переменные вместо.Как только вы придете, чтобы что-то изменить в программе, совершенно невозможно будет внести какие-либо изменения, так как логика не имеет структуры, и вы не представляете, что происходит, не читая каждую строку кода и не понимая ее сразу.Кроме того, вы можете использовать каждый ключ только в одном месте, потому что это глобальная таблица, так что я надеюсь, что никто не хотел использовать «var» в качестве имени переменной, и вы не возражаете против того, чтобы ваш код молча провалился, потому что вы получили глобальнуюимя неверное.