Snusmumriken
akamit
Snusmumriken
Когда я был маленький, я писал такое рекурсивно :<
Anatoliy
Ребята а подскажите, можно ли средствами луа, или средствами Zerobrane studio, или средствами и того и того, выполнить отладку скрипта следующим образом: в одном месте у меня в скрипте выскакивает ошибка - там переменная получает значение, но иногда оно по какому то недоразумению в ходе вычислений получается nil, и потом при действиях с этой переменной выскакивает ошибка всвязи с тем что она nil а не какое либо значение, вот возможно ли чтобы в этот момент, если переменная nil, скрипт остановился для отладки, т.е. как если бы он был запущен для отладки в режиме пошагового выполнения, может это как то можно через функции debug? я их еще не изучал
Snusmumriken
debug.debug()
Snusmumriken
Потом вобьёшь в консоль cont, и скрипт продолжится.
Snusmumriken
Получить строку стактрейса — str = debug.traceback(). В любом месте.
Anatoliy
debug.debug()
Спасибо, а так чтобы средствами ZB в режим пошаговой отладки перейти, незнаешь возможно ли такое?
Alexey
В zbs используется mobdebug
В нем есть метод старт который подключяется к серверу в zbs
просто сделать if и в нем вызвать эту функцию
Snusmumriken
Хе, кстати забавная тема, надо накатать такой дебаггер, который выгружает инфу и все upvalue в браузер через функцию.
Anatoliy
А подскажите еще, какая то странная вещь случается - вообщем пишется у меня текстовый файл, вообщем как обычно - открывается - file1=io.open(file, "w") , если файла нет, если уже есть то открывается в режиме file1 = io.open(file, "r+")
потом в него по ходу работы скрипта выгружается некая однообразная инфа, строки одинаковой длины заканчивающиеся .."\n"
file1:write(somestring.."\n")
Потом при повторном запуске скрипта вся эта инфа из файла читается по строкам:
for w in file1:lines() do, в таблицу - каждая строчка - новый элемент таблицы
и продолжается в него записыватся в конец, в режиме "r+"
Ну и при повторном перезапуске скрипта все по новой, и тут вдруг я обнаружил что при каждом перезапуске не все строчки из файла есть в таблице, то есть не все строчки прочитываются for w in file1:lines() do,
стал разбираться - оказывается у меня в файле не все символы перевода строки CR LF которрые соответствуют \n ( 0D 0A в шестнадцатиричн.) а некоторые символы перевода строки - CR ! который соответствует \13 ( т.е. только OD в шестнадцатиричн.) и вот эти строки for w in file1:lines() do и нечитает! причем он нечитает строку следующую после строки после которой строит \13 даже если и заканчивается на \n т.е. \n строка \13 - читает а \13 строка \n - нечитает
Глюк какой то, ведь ничто кроме скрипта в файл больше ничего не пишет, почему же тогда там то \n то \13 как символ перевода строки?
Snusmumriken
Ты совершенно зря открываешь файл не в бинарном режиме.
Snusmumriken
wb, rb, rb+
Snusmumriken
Если не пользоваться бинаркой, файлы будут предобрабатываться при записи и чтении, приводя к странным результатам.
Snusmumriken
Потом напишу итератор, который ориентируется на "\r?\n", хе.
Snusmumriken
И изначально формировать файлы таким образом.
Lucky
Тем временем начат перевод второй части книги "Lua Game Development Cookbook"
Lucky
Lucky
Эх, отпуск заканчивается. Успеть бы до нг перетолмачить.
Andrey
Решил всё-таки накатать свой lua-format, потому что существующие аналоги либо не поддерживают кастомизацию стиля, либо неотделимы от IDE. Накидайте плз свои хотелки для твика стилей, можно вдохновляться вот этим - https://zed0.co.uk/clang-format-configurator/
Snusmumriken
Используй всегда \n. \r — это яблочный рудимент, помнится. И ms-notepad хочет \r\n вместе, забей на него, блокнот для додиков.
🐅🤦♂️
Anatoliy
Andrey
Snusmumriken
Igor
Igor
Мне его хватало
Snusmumriken
Да, он крут, но НЕДОСТАТОЧНО хехехе
Igor
Несовсем полный дебаггер, но мне его хватало вполне
Igor
Были бы в lovebird ещё брейкпоинты с принтом стактрейса была бы вообще конфетка
Snusmumriken
Оно разрабатывалось для love2d, там брейкпоинты обычно останавливают мир что не круто
Igor
Для этих целей приходилось подключать mobdebug
Igor
Ну да, это я знаю, но всё равно, при дебаге тех же игр это помогло бы
Igor
в отдельном окне запускаешь сервер mobdebug выполнением функции require('mobdebug').listen()
Igor
а в скрипте, который хочешь отладить require('mobdebug').start() в самом начале
Igor
и запускаешь его
Igor
как там mobdebug с ZBS интегрируется я не в курсе, я эту IDE не трогал почти
Igor
но скорее всего там где-то в настройках есть запуск mobdebug сервера
Igor
Как-то так
Igor
Внутри скрипта обычная функция генерации псевдо-случайной строки
Igor
И я поставил брейкпоинт на конкатенации строки и сгенерированного символа
Igor
Igor
У mobdebug вообще дофига команд и все они описаны в help команде, так что проблем с общением у тебя с ним не будет. Был бы у этого всего добра ещё удобный веб-интерфейс, подобный lovebird было бы очень классно. Без него в принципе тоже обойтись можно, но с интерфейсом было бы всё таки удобнее
Alexey
В zbs есть пункт меню Start debug server
Alexey
Ну и опция чтобы не переходить в режим отладки сразу после вызова метода старт.
я обычно просто делаю условный вызов старт
Alexey
Ну и если есть короутины надо еще один метод вызвать
Lucky
Про Lua https://habr.com/ru/post/476644/
Alexey
Не верно ответ 10 :)
Egor
Как лучше в lua сделать такое:
local r = {1,2,3}
1. Найти максимальное значение
2. Проверить данная цифра входит ли в какой-то промежуток данных.
3. Маловероятно, но может быть в элементне массива не только int/float но и nil, string или вообще пустота.
?
Как вариант я бы мог сделать: math.max(unpack(r))
но он падает если там не инт
Igor
Ну вообще с такими специфичными условиями только перебором массива циклом:
max = 0
for i = 1, #r do
local v = r[i]
if type(v) == "number"and v > max then
max = v
end
end
ну или что-то подобное, для таких действий у Lua нет стандартной функции
Igor
🐅🤦♂️
Захотел померить скорость, набросал скрипт. Не знаю, конечно, что я измерил, решение math.max(unpack(r)) красиво, но имеет ограничение по количеству элементов, что кстати уже не раз обсуждалось. На 8000 уже падает, придется пересобирать lua что-бы поменять константу http://paste.ubuntu.com/p/XkKRFNtN6n/
Egor
🐅🤦♂️
тогда без разницы что использовать, если конечно не искать макс к примеру из миллиона таблиц по три элемента в каждой
Артём
Кто нибудь пробовал эту либу для создания бота: https://github.com/wrxck/telegram-bot-lua
Артём
загвоздка в том, что она не поддерживает прокси, а покупать vps не очень хочется :)
Артём
а без прокси телеграмовское апи блочится РКН
Andrey
а без прокси телеграмовское апи блочится РКН
она http запросы делает через luasec, а в её документации https://github.com/brunoos/luasec/wiki/LuaSec-0.6:
> However, the current implementation does not support proxy nor URL redirection, so the fields redirect and proxy are not supported in url. Also, setting http.PROXY is not permitted
Andrey
но для телеграма странно, конечно, не поддерживать апи для задания прокси
Артём
ага, не хочется городить огород
Andrey
а без прокси телеграмовское апи блочится РКН
но учитывая, что там только 1 место, где эта http либа юзается https://github.com/wrxck/telegram-bot-lua/blob/master/src/core.lua#L64, то можно наверное форкнуть и заменить вот этим https://github.com/daurnimator/lua-http
Andrey
или даже PR в мастер сделать, если автор жив
Артём
попробуемс
mva
mva
mva
1) https://github.com/rizaumami/tdbot.lua/blob/master/extra/tdbot_commented.lua -> tg/tdbot-wrapper.lua
2) https://github.com/giuseppeM99/tdlua/blob/b54cd0c29c7bc89b2c3792d7333f42f98eaad725/examples/tdbot.lua -> tg/tdlua-tdbot.lua
3) https://gist.github.com/raw/17cb1881157b4564c218ec9a9346fa27
// должна стоять либа tdlua
Anonymous
mva
да
mva
оно как зависимость tdlua притянется, по идее
Egor
Доброе утро. Как лучше сделать такое:
В скрипте main.lua есть некая переменная, которая выводится на экран. Есть модули, которые подключаются к main.lua и можно ли как-то сделать так: чтобы некая переменная из модулей аппендилась к переменной из main.lua? Или как-то сделать по другому. Задача: не редактировать каждый раз main.lua а что-то сделать на модуле и она добавилась
Артём
Артём
Snusmumriken
Snusmumriken
Можно и без передачи, но тогда имя конфига глобально резервируется, что не есть хорошо.