Другой метод, предложенный Оуэном Шепардом в списке рассылки lua-l :
Если мы установим package.loaded[<em>current-module-name</em>]
в верхней части каждого модуля, то любой другой модуль require
d позже может ссылаться на текущий (возможно, неполный) модуль.
A.lua:
local A = {}
package.loaded[...] = A
local B = require 'B'
function A.foo()
return B.bar()
end
function A.baz()
return 42
end
return A
B.lua:
local B = {}
package.loaded[...] = B
local A = require 'A'
function B.bar()
return A.baz()
end
return B
Это не будет работать везде. Например, если инициализация B
зависит от A.baz
, то произойдет сбой, если сначала загрузится A
, поскольку B
увидит неполную версию A
, в которой baz
еще не определена.