Модули на Lua


> module (name [, ···])

Создает модуль. Если package.loaded[name] содержит таблицу, то эта таблица является модулем.
Если name – составное имя (т.е., компоненты имени разделены точками),
module создает таблицы для каждого компонента. Например, если name равно a.b.c,
то module сохраняет модуль в поле "c" поля "b" глобального объекта "a".
Данная функция может получать дополнительные опции options после имени модуля,
где каждая опция является функцией, которая будет применена к модулю.

> require (modname)

Загружает данный модуль. Функция начинается с проверки таблицы package.loaded
для определения загружен модуль modname или нет. Если загружен, то require возвращает
значение, хранящееся в package.loaded[modname]. В противном случае, она пытается найти
загрузчик (loader) для данного модуля. При поиске загрузчика, require сначала запрашивает
package.preload[modname]. Если там есть значение, это значение (оно должно быть функцией)
является загрузчиком. В противном случае require ищет Lua загрузчик, используя путь,
хранящийся в package.path.

> package.cpath

Путь, используемый в require для поиска C  загрузчика.

> package.path

Путь, используемый функцией require для поиска Lua загрузчика.
При старте, Lua инициализирует эту переменную значением переменной окружения LUA_PATH


> package.loaded

Данная таблица используется функцией require для проверки, загружен модуль или нет.

> package.preload

Таблица, хранящая загрузчики для модулей

> package.loadlib (libname, funcname)

Динамическое связывание хостовой программы с C библиотекой libname.
Внутри этой библиотеки производится поиск функции с именем funcname
и она возвращается как C функция.
(funcname должно соответствовать протоколу lua_CFunction).

> package.seeall (module)

Устанавливает метатаблицу для модуля module с полем __index ,
ссылающимся на глобальное окружение, т.е. этот модуль наследует глобальное окружение.

> Пример модуля (5.3):

local mymodule = {}

local function private()
    print("in private function")
end

function mymodule.foo()
    print("Hello World!")
end

function mymodule.bar()
    private()
    mymodule.foo() -- need to prefix function call with module
end

return mymodule