grinchfox
мне кажется в таком случае всетаки проще наследованием
Snusmumriken
Главное - не делать сложных классов, с переписанными методами. А в типе той же еды - просто дописываешь в __index - табличку соответствующего типа еды, а в __index "класса" типа еды - класс еды. На деле проще чем кажется. Главное - организовать классы типов еды максимально гибко, шоб если нет каких-то методов а только статы - было всё равно заебок.
grinchfox
grinchfox
у предметов есть еще entity представители, которые принимают форму предмета для того чтобы находится в мире
grinchfox
жаль что это так
grinchfox
мне скорее обидно за то, что патронов нет
grinchfox
по крайней мере я так понял патроны это библиотеки
Roman
Mike Paul все ещё коммитит в luaJit, есть ещё патроны
Snusmumriken
Будут, но не очень много.
B
как получить побитное представление файла или вообще информации?
B
или есть где описания таких процессов, с перегонкой туда\обратно информации
Snusmumriken
file = io.open('/path/to/file.ext', 'rb') binary_data = file:read'*all' Ну, типа вот. Запись аналогична: file = io.open('/path/to/file.ext', 'wb') file:write(binary_data) io.open абсолютно идентичен соответствующим сишным командам. Если хочешь перевести в биты: function toBits(char) char = char:byte() local t={} -- will contain the bits while char > 0 do local rest = char % 2 t[#t+1]=rest char = (char - rest) / 2 end -- octet normalisation for i = 1, 8 - #t % 8 do table.insert(t, 0) end return table.concat(t) end bit_data = binary_data:gsub('.', toBits) Как-то так. На выходе получится куча нулей и единиц.
Snusmumriken
Хе. > print(toBits'q') 01000111 > print(toBits'3') 00110011 > print(toBits'Я') 1111100100000000 Не совсем правильно, надо подумать на этот счёт.
B
кстати когда мы передаем от джейсона данные они по сути являются чем? таблицей?
Roman
строкой, инфа 100%
B
и как вобще воспринимать что то такое local OrWisheGor = ... если написал грубо говоря посреди поля ну в плане что просто где то, это не как результат и тд тп, просто такое выражение , что будет идти в переменную, и будет ли? типа вот если так, что будет в переменных, есть ли вообще в таких случаях зависимость от расположения и все в таком духе local OrWisheGor = ... function bogofunkcija1() -- content end function bogofunkcija2() -- content end --more functions --more function --more function local indeec = ...
Roman
три точечки интересуют? так это просто аргументы функции, как arguments в js интересно, а как получается текст черненький в перемешку с голубеньким? в телеграме есть выбор цветов?
Roman
OrWisheGor и indeec это первый переданный аргумент, получается
B
где то просто видел что вне функций таким макаром можна получать какие то базовые аргументы типа путей или чего то такого
Roman
вот лежит файлик с контентом "arg = ..." мы его открываем обычным io.open, io.read, получаем строку source_code с содержимым а потом его эвалюэйтим! fn = loadstring source_code потом часто надо окружение этой функции задать: setfenv fn, {a: 1, b: 'типа глобальные переменные'} и чтобы вызвать, мы fn(123) и arg из самого начала становится 123
Roman
понятненько?
Roman
ради интереса заглянул в исполняемый lua скрипт, там нет таких троеточий, а аргументы принимаются в глобальную переменную arg
B
кстати насчет тех путей что мне скидывали ранее, даже там у меня косяки, и толком ничего не работает
B
потому как там в путях идет не сам пакет а именно среда
Roman
может подскажу что?
B
там типа так local p = arg[0]:match'(.*[\\/])'..'?.lua;' -- выуживаем из arg[0] - путь к запускаемому файлу package.path = p..package.path -- добавляем в пути
B
а в целом все равно беда бедная
Roman
путь явно неверно берется
Roman
он там относительный! во как
Roman
если я из этой папки его запущу, то там путь будет никакой, лучше юзать для пути lfs или ещё как-то динамически менять package.path - признак быдлокодинга, разве нет?
B
ну там у меня суть в том что бы не прописывать при рекваирах полные пути, а как то обрезать по максимуму но что б при этом оно работало мне не особо улыбается писать трактаты типа C:\\bla\\blabla\\blablalba\\file.lua при том что если такое куда то переедет то нужно самому внутри переписывать все пути под то место куда все переехало
Roman
у меня такой луа патх в bashrc: export LUA_PATH="./?.lua;$HOME/.lua/lib/?.lua" вот эта ./?.lua часть как раз грузит файлы относительно текущей папки
Roman
тогда возможно lfs.currentdir() поможет
Roman
да нет, точно, надо дописать в package.path относительный путь! только тут другая беда - на винде черточки неправильно повернуты, так что надо дописывать путь в зависимости от системы
Alexander
"неправильно повернуты" 😂
B
да че черточки шморточки там бы еще ладно но там вещь в том что все равно ищет файлы в корневой папке среды, а не проекта, тобишь по сути там ничего не меняется
Roman
корневая папка среды это что такое?
B
типа откуда пускается луа консоль
Roman
а надо какой путь?
Roman
странная проблема
Roman
если у тебя либы лежат в корневая_папка_проекта/a/b/c/d, сделай переменную, если лень писать prefix = "a/b/c/d/" и потом require prefix .. 'script' при том, что в package.path есть '.\' или свой реквай сделать: r = require require = (path) -> — прости, я только мунскрипт умею r 'a/b/c/d/' .. path
Roman
в package.path есть '.\?.lua' такое
B
я хочу катать отдельно вне зависимости от расположения консоли, что б код и среда были там где им удобно, но при этом что б не было проблем с запуском
Roman
require = (path) -> f = io.open path .. '.lua', 'r' loadstring(f\read '*a')()
Roman
ща
B
просто когда я воткнул ее в папку с проектом то проблем как таковых перестало быть. но там тоже такая штука что среда должна располагаться чуть ли не с самого верху что б просто при необходимости забуриватся в папки и подпапки, но там даже в таком случае вылазят проблемы с путями
Roman
ладно, вот у меня все луа либы хранятся в ~/.lua/lib, у других людей в других местах, на виндовсе тем более храни все твои зависимотсти там, где lua ожидает их найти, и никаких проблем не должно быть, верно? а вот такие проблемы это явно нарушение задумки тех, кто придумывал все эти пути и загрузки скриптов
B
оки, я просто воткнул и там большая часть проблем отпала но просто интересно с такой стороны посмотреть, но видимо слишком геморно делать реализацию проектов и среды отдельно, при этом что б пути в файлах прокта адаптировались к изменениям расположения
B
в такой вот структуре вылазят проблемы с запросом либ из папки
B
так может чуть более понятней но все равно не совсем ясно почему вылазит каша, может все слишком путано и нужно как то упрощать?
Snusmumriken
Я только поискал группы похожие на balmorhea, и тут понеслось
B
тут это кто как реализовывал свои простые преобразователи чисел из системы в систему?
Roman
на олимпиаде в 10 классе на ФО ДОС Вильнюс 1986 BASIC
Snusmumriken
Ну, в целом, это довольно просто.
B
у меня тут пока вылезло что то такое local function ost8( num ) local base = 8 -- base of number local divident = num -- number what we divide local remainder = 0 -- remainder from the divident local result = {} -- results table local count = 1 -- counter for number of numbers while(true) do if(divident < base) then result[count] = divident; break; end remainder = divident % base divident = divident / base divident = divident - (divident % 1) result[count] = remainder count = count + 1 end local End = "" for i = #result, 1, -1 do End = End .. math.floor(result[i]) end print( End ) end
Snusmumriken
Сложно. Пиши универсальный преобразователь. Хотя да, похоже на истину, просто меняешь базу. И можешь прогонять по словарю: end = end .. map[result[i]], где map - [0, 1, 2, 3, ... 9, 'A', 'B', 'C', .. , 'Z'].
B
там только в 16 я докидывал пачку ифов на вставку букав
Snusmumriken
Зачем if когда можно словарь?
B
никогда не слышал
Snusmumriken
Загоняем в него 32, получаем L.
Snusmumriken
Это map в моём примере. > [0, 1, 2, 3, ... 9, 'A', 'B', 'C', .. , 'Z']
B
а можно подробнее чепочем там с этим словарем? а то нипанятна, я так как страдаю то прогоняю ифами результат если найдено соответствие то вставляю в таблицу результатов соответствующее значение
Snusmumriken
function dec2any(num, base) local char, insert, floor = string.char, table.insert, math.floor local map = {} -- Динамическое заполнение, ну да пофиг for i = 0, 9 do insert(map, i) end for i = ('A'):byte(), ('Z'):byte() do insert(map, char(i)) end local out = {} while num > 0 do num, d = floor(num / base), num % base + 1 insert(out, 1, map[d]) end return table.concat(out) end function any2dec(num, base) num = tostring(num):gsub('^0+', '') -- опять динамическое заполнение, сколько можно? local map = {} for i = 0, 9 do map[tostring(i)] = i end for i = ('A'):byte(), ('Z'):byte() do map[string.char(i)] = i - 55 end local out = 0 local i = #num for n in num:gmatch'.' do i = i - 1 out = out + map[n:upper()] * base ^ i end return out end Эта фигня переводит десятичку во что угодно и что угодно в десятичку, до 36-системы (потому что словарь на 36 символов). Расширим кол-во символов - получим произвольную систему счисления.
Snusmumriken
А, правда эта фигня нормально работает с реальными числами. Но с целыми положительными работает только так.
Snusmumriken
Хех, алё, кому универсальный конвертер между системами счисления? :3
Snusmumriken
Меняя map, кстати, можно менять символы для представления чисел. Ну, то есть можно кодировать число в`╥╧╦┴╤ ▄╠┼╦╘╥╔╞╔╦┴├╔╤ └╓╬┘╚ ╟╒┬┼╥╬╔╩`, где каждый символ - число. Правда, было бы неплохо ещё кодировать-раскодировать бинарку. Но бинарная фигня у меня тоже есть (перевод десятички в бинарное представление и обратно, с заполнением хвоста нулями, шоб можно было фиксировать количество байт под число, мутил для своих протоколов)
Anonymous
Можно ли размещать вакансии?
Snusmumriken
Ох, в идеале - использовать для этого HeadHunter.
Anonymous
Там уже все есть)
Snusmumriken
Потому что тут всё таки обсуждение всяких стрёмных программистских штук.
Disi
А вы предложите работу на Lua? :D
Anonymous
Верно)
Anonymous
Вот боюсь постить, потому что понимаю, что обсуждаются программистские штуки, но Lua на hh не ходят)
Anonymous
Наверное, для hr. Но мне нужны хорошие ребята 👩🏻‍🏫
Snusmumriken
а почему они стремные??
Ну ты почитай мои посты чуть выше : )
Snusmumriken
Ох, я работаю lua-программистом, и нашёл вакансию на HH. Хм. В основном - бекенд-базы данных. Но мейл ру и ещё некоторые ребята активно используют луа в нгинксе.