local map = { {1, 2, 3, 3}, {1, 2, 3, "I"}, {1, 2, 3, 3}, } local coord = { x = 1, y = 1 } local function find_start(map, height, width) local res = coord; while map[res.y][res.x] ~= 'I' and res.y < height do res.x = 1; while map[res.y][res.x] ~= 'I' and res.x < width do res.x = res.x + 1; end res.y = res.y + 1; end if res.y == height then error("File has no start"); end return res; end print(find_start(map, 2, 4)) Я правильно понял, как это должно использоваться?
Highly Likely
Highly Likely
Ну, то есть, внутрь второго while’а поставь print(res.x)
Не должно ли тут быть <= вместо <? И нет ли у map кастомного __index?
Highly Likely
Не должно ли тут быть <= вместо <? И нет ли у map кастомного __index?
На вторую часть вопроса почти 100% –– нет (для новичка было бы очень необычно менять __index). На первую –– а разница? Он бы выпал в attempt to index nil/просто бы на один шаг дальше прокрутил
dmatseku
а все отбой
dmatseku
я тупой
Хоть это и не совсем по теме.
dmatseku
хотя такая ошибка в другой проге была, но именно в этой функции все вроде норм
Highly Likely
По первой части вопроса: I в конце не найдёт.
Не найдет и выпадет в attempt to index nil, не?
Не найдет и выпадет в attempt to index nil, не?
error("File has no start"); Upd: да, ты прав.
dmatseku
та не, уже ошибки нет
Что?
Если не доходишь до конца массива, то вываливаешься в условие с ошибкой.
Если I в конце.
Highly Likely
dmatseku
у тут бойня. function find_start(map, height, width) local res = coord; while res.y < height do res.x = 1; while map[res.y][res.x] ~= 'I' and res.x < width do res.x = res.x + 1; end if map[res.y][res.x] == 'I' then break; end res.y = res.y + 1; end if res.y == height then error("File has no start"); end return res; end
dmatseku
рабочий вариант, без выпадения исключений
Highly Likely
Ну значит проблема в том, как ты сравниваешь строки
dmatseku
Highly Likely
Может быть, у тебя не ‘I’
Highly Likely
Как и на что?
dmatseku
Как и на что?
getmetatable("").__index = function(str, i) return string.sub(str, i, i); end
dmatseku
иначе str[i] у меня не работает
Highly Likely
Ну, да, ведь в Lua строки –– не массивы символов :-)
Highly Likely
Шутки ради вот этот кусок замени
Highly Likely
if map[res.y][res.x] == 'I' then break; end на if map[res.y][res.x] == 'I' then print(‘Blablabla’) break; end
Highly Likely
И покажи вывод консоли
dmatseku
заменил, как и ожидалось
dmatseku
по-другому здесь может и можно выйти, но уже не вспомню как
dmatseku
ахах, да я уже просто общаюсь, я ж уже давно написал, что решил проблему
dmatseku
попросили вставить - я вставил
А, всё. Туплю спросонья.
dmatseku
может мы просто не поняли друг друга
dmatseku
о, неплохо
dmatseku
кст, а как тут память устроена? тупо все в куче выделяется?
dmatseku
а то я видел про уборщика, но не видел про выделение ничего
Anonymous
Подскажет кто нибудь как проверить существование папки, плиз?) 🙃
dmatseku
ну, если не ответят, то вродь можно прикрутить фрагмент на си, а там уже dirent
Anonymous
Эм... Я что то сомневаюсь что интерпритатор GG такое воспримет
dmatseku
хотя это же lua к си прикручивается, а не си к lua
dmatseku
но я где-то видет про полукровный код
Anonymous
Вроде да
Anonymous
Все функции луа 5,3 вроде может
Anton
Ну тогда примерно так: tarantool> os.execute('test -d /tmp') --- - 0 ... tarantool> os.execute('test -d /ololo') --- - 256 ... tarantool> Но это под linux и не особо изящно
Anonymous
Спасибо, сейчас пойду почитаю что делает os.execute и проверю
fgntfg
https://stackoverflow.com/questions/1340230/check-if-directory-exists-in-lua
dmatseku
а можно как-то сдвинуть массив? т. е. сделать массив {1, 2, 3, 4} {2, 3, 4} без полного ручного копирования?
fgntfg
shift?
fgntfg
pop?
fgntfg
кажется Lua такое умеет
dmatseku
та все, я список зафигачил
dmatseku
трудно ориентироваться в переменных, не могу до конца понять, когда я беру ссылку, а когда копию
Highly Likely
(ну почти всё)
dmatseku
ну хоть подобность джавам\шарпам обнадеживает
dmatseku
конечно, ручное управление больше нравится, но не при динамической типизации
dmatseku
а можно как-то объекты вынести в отдельный файл? типа есть coord = { x = 1, y = 1, parent = 0 } и хотелось бы не переписывать его постоянно
dmatseku
долбанный шитф не нажимается
dmatseku
сяб)
Anonymous
Парни, а луа может копировать файлы из одной директории в другую?
Anonymous
С существованием папок разобрался,встал на другом моменте
Anonymous
Мне нужно создавать текстовый файл, с параметрами профиля графики, профили есть готовые заранее
Anonymous
Но они в hex'e
Anonymous
Anonymous
Anonymous
Не въеду как мне корректно записать в переменную это значение, чтоб оно в итоге записало это в конечный текстовый файл