пакет модуля Lua
Модуль похож на пакет библиотеки, начиная с Lua 5.1, Lua добавлен стандартный механизм управления модулем, вы можете поместить общий код в одном файле, в виде API интерфейса вызовов в других местах, в пользу повторного использования кода и уменьшить Код муфты.
Модуль Lua представляет собой таблицу из переменных, функций и других известных элементов, создавая тем самым очень простой модуль, чтобы создать таблицу, то необходимо экспортировать константы, функции, в которые, в конце концов вернулся к столу на линии. Далее создает пользовательский модуль module.lua, формат кода файла выглядит следующим образом:
-- 文件名为 module.lua -- 定义一个名为 module 的模块 module = {} -- 定义一个常量 module.constant = "这是一个常量" -- 定义一个函数 function module.func1() io.write("这是一个公有函数!\n") end local function func2() print("这是一个私有函数!") end function module.func3() func2() end return module
Из сказанного выше, структура модуля является структура таблицы, так что вы можете позвонить в таблицу в качестве элемента операции, чтобы работать в качестве константы в модуле вызова или функции.
Выше func2 объявлен как блок локальных переменных, это означает, что собственная функция, и, следовательно, не могут быть доступны из-за пределов частного функционального модуля должен вызываться модулем публичной функции.
требуют функции
Lua предоставляет функцию требуют используется для загрузки модулей. Чтобы загрузить модуль, просто вызовите его. Например:
require("<模块名>")
или
require "<模块名>"
Вернется после выполнения требуют постоянной или функции с помощью модуля, состоящего из таблицы, и будет определять глобальную переменную, которая содержит таблицу.
-- test_module.lua 文件 -- module 模块为上文提到到 module.lua require("module") print(module.constant) module.func3()
Приведенный выше код выполняется в результате:
这是一个常量 这是一个私有函数!
Или загрузить модули определяют переменную псевдоним, легкий вызов:
-- test_module2.lua 文件 -- module 模块为上文提到到 module.lua -- 别名变量 m local m = require("module") print(m.constant) m.func3()
Приведенный выше код выполняется в результате:
这是一个常量 这是一个私有函数!
механизм загрузки
Для пользовательских модулей, а не на котором будут делать каталог файлов, требуется функция имеет свою собственную стратегию путь к файлу загрузки, он пытается загрузить файл модуля из библиотеки программы Lua или C.
Требовать путь поиска для Lua файла сохраняется в глобальной переменной package.path, после загрузки Lua, LUA_PATH начальное значение переменной окружения переменной окружения. Если вы не можете найти переменную окружения, путь по умолчанию определяется инициализации во время компиляции.
Конечно, если там нет LUA_PATH эту переменную окружения, вы также можете настроить параметры, откройте в файле .profile домашней директории текущего пользователя (он не создает, вы также можете открыть файл .bashrc), например, "~ / Lua /" Путь присоединиться к LUA_PATH среды переменная:
#LUA_PATH export LUA_PATH="~/lua/?.lua;;"
Путь к файлу "," отделены друг от друга двух последних ";;" означает новодобавленный плюс изначального пути пути по умолчанию.
Затем обновить параметры переменные среды вступают в силу немедленно.
source ~/.profile
Тогда package.path Предполагаемые значения:
/Users/dengjoe/lua/?.lua;./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua
Так что при вызове требуется ( "модуль") будет пытаться открыть следующие каталоги файлов для поиска целей.
/Users/dengjoe/lua/module.lua; ./module.lua /usr/local/share/lua/5.1/module.lua /usr/local/share/lua/5.1/module/init.lua /usr/local/lib/lua/5.1/module.lua /usr/local/lib/lua/5.1/module/init.lua
Если подошел к целевой файл будет называться package.loadfile для загрузки модулей. В противном случае перейдите к библиотекам C.
поиск Файл путь package.cpath получается из глобальной переменной, и эта переменная LUA_CPATH для начальных переменных окружения.
Стратегия поиска с тем же, что и выше, но теперь поиск так заменен или тип файла DLL. Если вы ее нашли, то это потребует от package.loadlib, чтобы загрузить его.
пакет C
Lua и C легко комбинируются с помощью C, чтобы написать пакет Lua.
Написать другой пакет и Lua, C пакет Перед первым использованием должен быть загружен и подключен, в большинстве систем это самый простой способ для достижения динамических механизмов библиотечных ссылок.
Lua обеспечивает все функциональные возможности динамического связывания в функции называется loadlib. Эта функция принимает два аргумента: абсолютный путь к библиотечной функции и инициализации. Таким образом, пример типичного вызова:
local path = "/usr/local/lua/lib/libluasocket.so" local f = loadlib(path, "luaopen_socket")
Функция loadlib загружает указанную библиотеку и подключен к Lua, но она не открывает библиотеку (т.е. без функции инициализации вызова), в противном случае он возвращает функцию инициализации как функцию Lua, так что мы можем назвать его непосредственно в Lua.
Если произошла ошибка при загрузке динамической библиотеки или инициализации функции поиска, loadlib возвращает ноль и сообщения об ошибках. Мы можем изменить предыдущий раздел кода для обнаружения ошибок, а затем вызвать функцию инициализации:
local path = "/usr/local/lua/lib/libluasocket.so" -- 或者 path = "C:\\windows\\luasocket.dll",这是 Window 平台下 local f = assert(loadlib(path, "luaopen_socket")) f() -- 真正打开库
В нормальных условиях мы ожидаем, что выпуск бинарной библиотеки содержит предыдущем фрагменте кода файла аналогичен незавершенная, бинарные файлы установки могут быть легко размещены в каталоге, вам нужно всего лишь изменить двоичный файл библиотеки окурка соответствует реальному пути.
Каталог, в котором файл был добавлен к заглушке LUA_PATH, этот параметр может быть использован после загрузки библиотеки C функции требуют.