QUIK 7.10.0.76. Иногда при подключении к серверу скрипт падает с ошибкой
Цитата |
---|
attempt to call global 'W' (a nil value) |
W - это функция, которая крутится в цикле main. Она никак не может быть nil.
Вот фрагмент кода:
Код |
---|
function OnConnected()
Sort = true
end
function W()
return nil
end
function main()
...
while run do
if Sort then
table.sort({0, 1}) -- сортировка никак не связана с функцией W, но без сортировки проблема не воспроизводится
Sort = nil
elseif not W() then -- тут возникает ошибка
else sleep(100) end
end
end |
Целый день убил на поиск проблемы, пока не заглянул в глобальную таблицу _G. А её и нет:
когда изменил код так:
Код |
---|
function main()
while run do
if Sort then
table.sort({0, 1})
Sort = nil
else
if not _G then message('Ahtung! Not _G', 3)
elseif not W() then
else sleep(100) end
end
end
end |
то при подключении скрипт стал однократно выдавать сообщение об отсутствии _G (т.е. впоследствии _G снова обнаруживается) или падать с ошибкой
Цитата |
---|
attempt to call global 'W' (a table value) (неожиданно!) |
Скрипт использует только функции из qlua.dll, не модифицирует функцию W, и не работает напрямую с глобальной таблицей.
Соответственно, вопрос разработчикам: есть ли в QLua какие-либо механизмы, способные так повлиять на работу?