Как правильно подойти к вопросу: куда делась функция module?
Ссылка скопирована
~ lua ✔ Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio > print(module) nil >
Каким способом видно module возвращает nil. Как быть если в моем коде используется module?
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Искусственный интеллект
Что делать, если OpenRouter ограничивает доступ к моделям?
1 ответ

Функция
moduleисчезла не “сломалась”, а была удалена из стандартной Lua начиная с Lua 5.2. В Lua 5.1 она ещё была, но уже считалась неудачным подходом. В Lua 5.4print(module)закономерно выводитnil. Поэтому старый код нужно переписать под обычный возврат таблицы из модуля.Старый стиль мог выглядеть так:
module("mymodule", package.seeall) function hello() print("hello") end
Новый нормальный стиль:
local M = {} function M.hello() print("hello") end return M
Использование:
local mymodule = require("mymodule") mymodule.hello()
Если у вас большой старый проект на Lua 5.1, есть три варианта. Первый — запускать его на Lua 5.1/LuaJIT, где
moduleещё существует. Второй — добавить временную совместимость, но это костыль. Третий и правильный — постепенно перевести модули на возврат таблицы.Временный совместимый слой возможен, но я бы использовал его только как промежуточный этап миграции. Старый
module(..., package.seeall)загрязняет окружение и затрудняет понимание зависимостей.При переносе обращайте внимание на глобальные переменные. В старом стиле функции и переменные могли неявно попадать в окружение модуля. В новом стиле всё нужно явно класть в
Mили оставлять локальным.Итог: в Lua 5.4 функции
moduleнет. Перепишите модули в форматlocal M = {}; ...; return M. Это современный и переносимый вариант для Lua 5.2+.