grinchfox
мне кажется в таком случае всетаки проще наследованием
Snusmumriken
Главное - не делать сложных классов, с переписанными методами.
А в типе той же еды - просто дописываешь в __index - табличку соответствующего типа еды, а в __index "класса" типа еды - класс еды. На деле проще чем кажется.
Главное - организовать классы типов еды максимально гибко, шоб если нет каких-то методов а только статы - было всё равно заебок.
grinchfox
grinchfox
у предметов есть еще entity представители, которые принимают форму предмета для того чтобы находится в мире
grinchfox
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
в такой вот структуре вылазят проблемы с запросом либ из папки
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 не ходят)
Ruslan
Anonymous
Наверное, для hr. Но мне нужны хорошие ребята 👩🏻🏫
Disi
Snusmumriken
Ох, я работаю lua-программистом, и нашёл вакансию на HH. Хм.
В основном - бекенд-базы данных. Но мейл ру и ещё некоторые ребята активно используют луа в нгинксе.