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

Post date: 05.03.2016 14:33:48

Иногда, при запуске некоторых скриптов на 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.