Новости‎ > ‎

require'socket' - module 'socket' not found!

Отправлено 5 мар. 2016 г., 6:33 пользователем web admin   [ обновлено 5 мар. 2016 г., 6:34 ]
Иногда, при запуске некоторых скриптов на Lua в программе QUIK, приходится наблюдать такую картинку:

module 'socket.socket' not found:

В данном случае:
D:\Quik\SuperScalp.lua:38: module 'socket.socket' not found:
no field package.preload['socket.socket']
no file '.\socket\socket.lua'
..................................
Нет, вроде, да и ладно. Но сообщение об ошибке могло бы быть более дружелюбным! И без аварийного выхода.
Для этого в программе, перед вызовом require"socket" (в данном случае require("socket.socket")), следует проверить на возможность безошибочной загрузки:

function isModule(modname)
if not package.loaded[modname] then -- Если модуль modname не загружен ранее
for i, v in ipairs(package.loaders) do
local loader = v(modname)
if type(loader) == 'function' then
package.preload[modname] = loader
return true
end
end
end
end
--
local modname = "socket.socket"
local _socket
local _mes
if isModule(modname) then
_socket = require(modname)
else
_mes = modname..' отсутствует!'; message(_mes,3)
end
--

Функция isModule(modname) проверяет возможность загрузки. При положительном результате загружает модуль, иначе - выводит некоторое сообщение.
Важно учесть далее в логике программы значение (или наличие) переменной local _socket.

Comments