Lua, Требовать, Доступные функции

Если я require включил три файла в свой сценарий Lua, может ли какая-либо функция в любом из этих файлов затем увидеть (и, что наиболее важно, вызвать) любую из других функций?

Я сталкиваюсь с проблемой вызова функций, которые вызывают другие функции. Я попытался поместить различные функции в другие файлы, а затем include их вместо того, чтобы записывать их в основной файл.

Я думаю, что это работает, мои тесты убедительны, если не окончательны.

Мой основной код делает это ...

 require "SOME_REQUIRED_FILE_01"
 require "SOME_REQUIRED_FILE_02"
 require "SOME_REQUIRED_FILE_03"

 XYZ = 0

 File_02_Function_A()

Я просмотрел сайт Lua и нашел ЭТА СТРАНИЦА, но я не совсем понимаю ее.

Может ли КАЖДЫЙ функционировать во всех трех необходимых файлах, а ВСЕ ДРУГИЕ работать во всех трех файлах?


person User.1    schedule 25.04.2014    source источник


Ответы (1)


require в основном то же самое, что и dofile, за исключением механизмов, которые избегают загрузки одного и того же файла несколько раз (и некоторых других полезных вещей, таких как загрузчики). Это означает, что они также могут устанавливать глобальные переменные (хотя и не должны). Итак, если вы установите глобальную переменную в одном из требуемых файлов, глобальную переменную можно будет увидеть во всей области действия функции require. Это означает также и в других необходимых файлах.

При этом не рекомендуется устанавливать глобальные переменные в required файлах. Лучше вернуть таблицу, внутри которой есть функции и переменные, экспортированные модулем. Затем вы должны вызвать эти функции следующим образом:

local some_required_file_01 = require "SOME_REQUIRED_FILE_01"
local some_result_01 = some_required_file_01.some_function_01()
person W.B.    schedule 25.04.2014
comment
Может ли функция в 1-м требуемом файле вызывать функцию в 3-м требуемом файле? Моя проблема заключалась в том, что функции вызывали функции, которые еще не встречались при выполнении, что приводило к вызову функции с нулевым значением. - person User.1; 25.04.2014
comment
В общем, да, но его можно вызвать только после загрузки третьего файла. Обратите внимание, что того же можно добиться, если вы последуете совету не устанавливать глобальные переменные. Вы можете потребовать третий файл в основном файле, но вы также можете потребовать тот же файл в первом файле и вызвать функции локально. Он намного чище и требует, чтобы вы не загружали файл дважды. - person W.B.; 25.04.2014
comment
Спасибо, получил его. Дважды щелкнул по вашему ответу. - person User.1; 25.04.2014