Есть ли способ иметьРекомендуемый способ иметь 2+ модули рекурсивно ссылаются друг на друга в Lua 5.2
- Два модуля Lua (назовем их
A
иB
) - Каждый модуль использует функции из другие, поэтому они должны
require
друг другу - Третий модуль (назовем его
C
) может использоватьA
, но неB
например
C.lua
:
local A = require 'A'
-- ...
A.foo()
- Там может быть другой модуль
D
, который требуетB
, но неA
и/илиE
, требующий какA
иB
- Ни
A
ниB
, ни их члены должны быть добавлен в глобальное пространство имен. - Избегайте использование функции
module
иsetfenv
(устаревшее в Lua 5.2)
Связанных: Lua - how do I use one lib from another? (примечание:. Это решение не обрабатывает циклические зависимости)
Есть ли вред в вызове 'require' из функции вроде этого? Я только видел, как он использовался на верхнем уровне. – finnw
В этом [предупреждении] в [справочном руководстве] (http://www.lua.org/manual/5.1/manual.html#pdf-require), поэтому я считаю, что это безопасно. –
Вы можете использовать 'require' в любом месте кода. Например, я часто использую эту идиому, чтобы запустить RemDebug в заданной точке файла: 'if somecondition then require 'remdebug.engine'.start() end' –