Короткий ответ:
нет
Длинный ответ :
Когда вы require
файл, lua сначала проверяет, был ли модуль ужебыл загружен.Если нет, он загружает (выполняет) файл и сохраняет его возвращаемое значение в глобальной таблице, где он кэшируется.Это означает, что a) some-library требуется только один раз и b) то же самое происходит для оболочки, поэтому у вас есть одна оболочка для одна библиотека;в отличие от нескольких оболочек для одной библиотеки или нескольких оболочек с отдельными библиотеками.
Имейте в виду: если ваш модуль возвращает не код библиотеки, а функцию, которая затем создает код библиотеки, только функция кэшируется, но каждый раз, когда вы ее запускаете, она возвращает другую копию вашего библиотечного объекта.Например:
-- lib.lua
return function()
{ foo = function(bar) print("fooing a bar...") end }
end
-- program.lua
factory_1 = require "lib"
factory_2 = require "lib"
print(factory_1 == factory_2) --> prints "true"
lib_1 = factory_1()
lib_2 = factory_1() -- not a typo, it's factory_1 called twice
print(lib_1 == lib_2) --> prints "false"
И если вам действительно скучно, вы можете создать библиотеку (в виде таблицы), которая при вызове, как если бы она была функцией (используя __call
metamethod) возвращает новый экземпляр библиотеки, как и первый.