Natalie
у меня скорее общий вопрос. Мб кто утром ответит...
Виснет при исполнении прога. Хотя предпосылок нет.
На дебаге заметила, что периодически из одной функции переключается на другую, но возвращается назад. Обе функции работают с общей глобальной таблицей. Мб тут фишка...
В общем, вопрос: в Lua как-то по-особому идет работа с функциями? Я рассчитывала, что функция не возвращает управление и, собс-но не дает доступа к изменению глобальных переменных никому, пока не закончит. Это не так?
Snusmumriken
Natalie
доброе утро
Ну вдруг кто глянет - пока не могу найти, почему и на каком этапе мы виснем...
Snusmumriken
Добавь туда пример текста лабиринта, если можно : )
Natalie
ой да)
Natalie
Natalie
это можно как-то прям к текущему файлику на пасте присобачить?
Natalie
пока ищу, сброшу так
Snusmumriken
Но в целом, самый тупой способ определить место зависания - во все циклы добавить:
while ... do
print(1)
end
Natalie
Natalie
тестировала на меньшем
Natalie
Snusmumriken
Ага!
Natalie
ща попробуем
чего терять-то=)
Snusmumriken
Ну, пронумеруй циклы, выяснишь тот который слишком долго работает.
Snusmumriken
Ммм.. принты.
Snusmumriken
ща попробуем
чего терять-то=)
Пришло время дурацких советов.
У тебя там есть:
ReadData = FileRead:read("*l")
while ReadData ~= nil do
...
ReadData = FileRead:read("*l")
end
Это в целом можно заменить на:
for line in io.lines('filename') do ... end
Или
for line in file:lines() do ... end
Лично я, правда, предпочитаю отделять парсинг файла от парсинга строки.
Ну типа сразу всё считываем, а потом работаем чисто как со строкой.
Или, если файл слишком большой и не влезает в память — читать чанками по несколько мегабайт, и мутить потоковый парсинг, но всё равно отдельно от io-операций, ибо даёт гибкость (возможность задать лабиринт текстом, например).
Snusmumriken
А вот методика
local client = socket.accept()
while client do
server:addClient(client)
client = socket.accept()
end
Отлично работает в тех случаях, когда мы не можем прочитать сразу всё, и у нас неизвестное количество входных данных. Ну там, точно так же крайне удобно принимать данные от отдельных клиентов, или принимать http chunked body.
Co(n)stantine👨🔬
Релиз http-сервера Apache 2.4.38 с объявлением стабильным модуля mod_lua https://opennet.ru/50010/
Snusmumriken
Ничоси!
Co(n)stantine👨🔬
Ничоси!
но уже ненужно, да?😏
Co(n)stantine👨🔬
ведь есть nginx
Snusmumriken
Сложный вопрос. Я написал уже столько вебсерверов, что пришло время ковырять чужие.
Co(n)stantine👨🔬
Lucky
Ко вчерашнему срачику. В чём косяк аргументации оппонентов - вместо объективных аргументов, типа "использование оператора goto ломает совместимость с Lua 5.1" приводятся субъективные доводы "Дийкстра не велел" и "В насе заперщают".
Snusmumriken
А Кнута так никто и не читал!
ShadoWalkeR
Я читал, что goto в определенных местах лучше чем что либо. Но в остальном на goto код очень легко превратить в нечитабельный и неподдерживаемый кусок г
Lucky
Я прочёл бы, но где всять кошерное издание?
Lucky
Snusmumriken
ShadoWalkeR
Так что если есть возможность не пользоваться goto, то лучше его избегать)
Lucky
Поэтому его не рекомендуют именно "йуным пионэрам с сопливыми руками"
mva
mva
у меня скорее общий вопрос. Мб кто утром ответит...
Виснет при исполнении прога. Хотя предпосылок нет.
На дебаге заметила, что периодически из одной функции переключается на другую, но возвращается назад. Обе функции работают с общей глобальной таблицей. Мб тут фишка...
В общем, вопрос: в Lua как-то по-особому идет работа с функциями? Я рассчитывала, что функция не возвращает управление и, собс-но не дает доступа к изменению глобальных переменных никому, пока не закончит. Это не так?
если ты не используешь корутины (что скорее всего так), то да, функции не возвращают управление пока не закончат.
Но у меня откуда-то предчуствие, что мы сейчас говорим не о скрипте запущенном в puc-rio'вском интерпретаторе, и даже не в luajit'е, а о какой-то софтине с тредами.
Snusmumriken
Natalie
Он в условном "мейне" инициализируется на этапе сохранения лабиринта в BaseMaze номером ячейки.
В текущем примере это тупо цифра 39
На дебаге проверяла, хранит 39 и дальше передает как 39
Natalie
118 строчка
Dima
Решил первую задачу более менее сложную на Lua
Dima
Dima
в сравнении с Ruby
Dima
Dima
много пришлось прописывать.
Dima
надо бы по скоростям проверить. Хороший задел.
Dima
все хотел испытать сколько что работает.
Dima
Теперь хорошо бы по скоростям сравнить.
Dima
для интереса
Dima
благо задача такая где данных можно набрать уйму
Dima
Dima
просто можно html manual скармливать и получать скорость вычисления веса.
Dima
только по \n сделать`split`
Saphire
...Что бы блджад делаешь?
Saphire
string.gsub
Saphire
"легче" в ruby
Saphire
...у меня слов нет о луашном коде.
Dima
прям сейчас вышлю. Засечём время выполнения задачи тобой.
Dima
ну всё, задача у тебя. козыри на руках.
uhx
Saphire
Всё готово :)
Saphire
А, сек
Saphire
Dima
Dima
а зачем ключи tonumber(k)? разве ключи не числа?
Saphire
На всякий
Saphire
А так да, лишнее
Dima
На всякий
А каким образом в Lua проиходит проверка типа переменной?
Dima
type(x)
Dima
этот вопрос решен.
Natalie
@Snusmumriken , @Lucky_Uk и все, кто был причастен к этому, чтоб его, лабиринту)
Отчитываюсь: построчный принт помог. Даже не чистила код пока. Сейчас проблема в том, что таблица из функции почему-то теряется при передаче в мейн.
Код вот: https://pastebin.com/WGgrz7aS
строчка 96 - возвращаем явно не пустую таблицу
строчка 173 - присваиваем эту возвращенную таблицу новой переменной NewWay. А вот она оказывается пустой...
С чем это может быть связано?
Natalie
сори за явно нубские вопросы... Чувствую, что ошибка элементарная и очень не хочется убить на нее море времени...
Natalie
nil. Ничего не принт, так и пишет, мол, попытка обратиться к nil-value
Natalie
вот сделала этот Way глобальным (как и половина всех переменных :\), вручную присвоила NewWay = Way
и норм, его устроило...
вот пытаюсь понять почему...
Natalie
ок, принято. Исправлюсь
Natalie
угу. Исправила - копипастом из объявления таблицы. Не оно...
Снова пытаюсь взять #NewWay, говорит, attempt to get lenght of NewWay (a nil value)
Natalie
короче, сейчас все работает с помощью вызова фукнции и отдельно NewWay = Way
Но это же не хорошо так делать...
Natalie
согласна, не могёт. Значит, что-то идет не так...
Natalie
да то такое, я могу сбросить исходник)