7
/ghzen@FailsBot
FailsBot
/ghzen@FailsBot
Avoid administrative distraction.
FailsBot
GET
Group Butler [beta]
Hi d9k!
Dmitry
Бот Falls, написанный на си и запущенный на планшете?! зачем так извращаться? 😅
Anonymous
>Falls
Dmitry
/me failed to write @FailsBot name
Group Butler [beta]
Hi Dimok!
ShadoWalkeR
Если кому интересно - я тут хороший ман по написанию модулей для Lua на С нашел - http://chsasank.github.io/lua-c-wrapping.html
🦥Alex Fails
Отличненько
ShadoWalkeR
Полуоффтоп - разработчики Lua не знают чем стек отличается от очереди, и называют первым второй 😔
ShadoWalkeR
Хотя я бы даже сказал между стеком и массивом
ShadoWalkeR
Поскольку при обмене данными между С и Lua обратиться можно к любому элементу по его индексу
ShadoWalkeR
Стек LIFO - Last In First Out, очередь FIFO - First In First Out
ShadoWalkeR
Угу.
ShadoWalkeR
lua по умолчанию забирает также как в очереди аргументы - начиная с первого закинутого
ShadoWalkeR
Ну раз начал - то продолжай
ShadoWalkeR
https://www.intuit.ru/studies/courses/648/504/lecture/11457?page=1
ShadoWalkeR
Я почему и поправился что верней следовало бы назвать массивом - по индексу доступна выборка.
Aleksey
Еще в студенческие годы ходила шутка, что автомат Калашникова преобразует стек в очередь
ShadoWalkeR
А еще есть дека насколько помню - там можно добавлять/удалять в начало и конец
ShadoWalkeR
А еще оффдоки на CAPI писал чукча. У него lua_get* и lua_push всегда чтото помещают в стек, хотя lua_get* забирает это оттуда😐
ShadoWalkeR
А наврал. Это check* забирает со стека
Snusmumriken
Карочи, это двунаправленная очередь (дека (колода), потому что можно и пушить и попать с обеих сторон), но изначально (в ранних версиях lua) это был именно что стек. А ещё, есть такая штука как "стековая виртуальная машина", она так называется, и луа организована по этому принципу.
Snusmumriken
Поэтому хватит цепляться к мелочам : ) Пусть называется как называется, всё равно все знают что это. А те кто не знает - тем и не нужно, хе.
Snusmumriken
А хотя не, меня глючит. Это вполне себе нормальный стак. Попать "со дна" нельзя, только через "settop" сбросить значения с другого конца. Другое дело что в луа оно грузится "первые аргументы - на дне", а из луа в С выгружается "первые аргументы на вершине", для удобства использования.
FailsBot
d9k failed to write @FailsBot name
Snusmumriken
Snusmumriken
Хм, или я не помню всех фич. При пуше не исключено что добавляется не "на вершину" а "в конец", хм. Тогда имеют смысл конструкции типа lua_rawset(L, -3);, типа, пушим таблицу, ключ и значение, они болтаются в конце, а этой фигнёй мы их типа склеиваем, -3 - с конца, чтобы не париться с вычислением номера позиции этих ключей-значений. В общем, это всё равно стек, никакая не очередь, ребзя. Так что когда пушим строку - она добавляется первым элементом, пушим ссылку на таблицу - добавляется второй, пушим число - добавляется третьим, и в этом же порядке оно выгружается в луа (да, как очередь). Всё норм. снус не всё знает, он редко пишет/читает сишные прослойки, но он уверен что это стек
Anonymous
Здраствуйте. Норм ли писать сайты на луа?
ShadoWalkeR
http://chsasank.github.io/lua-c-wrapping.html - все как в этом примере
ShadoWalkeR
Луа кладет сначала 4 потом 5 в стек. С через luaL_checknumber (L, 1) забирает 4, потом через luaL_checknumber (L, 2) получает 5.
ShadoWalkeR
В обратку также работает
ShadoWalkeR
Хотя тут наверно как с таблицами - кто как хочет, тот так и работает. А термины в документации вводят в заблуждение
"Норм сайты", написанные на Lua, точно есть.
ShadoWalkeR
В элтексовом оборудовании и опенврт веб интерфейс на луа сделан
Anonymous
"Норм сайты", написанные на Lua, точно есть.
Я не про качество сайтов, а про приятность процесса
Anonymous
Попробовал Lapis, неплохая штука
Anonymous
Спасибо вам за ваши ответы
Kukuzapa
Попробуй sailor
akamit
привет, подскажите пожалуйста, как лучше распарсить такую строку a=1;b=2;c=3 на переменные? (ключ и значение)
Yuriy
gsub
akamit
gsub
спасибо, почитаю
Yuriy
Хотя не вакт что так получится
Yuriy
я бы через split прогнал бы и все
Yuriy
local function split(split_str, splitter) local value = {} local index = 1 for half in string.gmatch(split_str,'([^'..splitter..']+)') do value[index] = half index=index+1 end return value, index end
Group Butler [beta]
Hi Denys!
Nick
а чем из сваггера/опенапи генерить код для сервера? гугл ничего не находит
fgntfg
можно без индекса
fgntfg
вообще map надо в стандарт языка вкорячить, и редус
Yuriy
Да без индекса можно
Yuriy
я просто ег осебе передавал как отдельно знаение где то и не стал удалять
akamit
Хотя не вакт что так получится
я так сделал for w in data:gmatch("([^,]+)") do for v,k in w:gmatch("(%w+)=(%d+)") do app.noop(v,k) arr[v]=k end end
Yuriy
Ну и норм.
Yuriy
вообще при всей бедности интерфейса у луа работа со строками довольно гибкая
akamit
а зачем первый match вообще нужен?
строка так выглядит a=1;b=2;c=3
fgntfg
И? Зачем её быть на подстроки, чтоб их потом парсить?
akamit
а ну да)
Snusmumriken
привет, подскажите пожалуйста, как лучше распарсить такую строку a=1;b=2;c=3 на переменные? (ключ и значение)
str = 'a=1;b=2;c=3' res = {} for key, value in str:gmatch';*([^;=]+)=([^;=]+);*' do key, value = (tonumber(key) or key), (tonumber(value) or value) res[key] = value end
Snusmumriken
fgntfg
если строка заканичвается на ; то всё будет не очень хорошо
akamit
вот только все после точки отрезает :(
fgntfg
Вот теперь я не вижу багов.
Snusmumriken
arr = {} for v,k in data:gmatch("(%w+)=(%d+)") do arr[v]=k end
Смотри. Если у тебя числа в качестве ключей-значений, в массив уйдут строковые варианты ключей/значений. У меня, правда, насильное преобразование к числам, если возможно.
fgntfg
Пофиксил
а две ; подряд не заставит ли цикл завершиться? Я хоть убей не помню, что вернёт match
fgntfg
Ну тогда гуд
akamit
str="ssrc=1465325083;themssrc=4202564892;lp=0;rxjitter=0.000000;rxcount=23;txjitter=0.000499;txcount=32;rlp=0;rtt=0.000000" arr = {} print(str) for v,k in str:gmatch("(%w+)=(%d+)") do print(v,k) arr[v]=k end
Snusmumriken
Ну тогда гуд
Ещё раз пофиксил на любое количество ';', надо проверить ))) Да, пашет.
akamit
# lua 2.lua ssrc=1465325083;themssrc=4202564892;lp=0;rxjitter=0.000000;rxcount=23;txjitter=0.000499;txcount=32;rlp=0;rtt=0.000000 ssrc 1465325083 themssrc 4202564892 lp 0 rxjitter 0 rxcount 23 txjitter 0 txcount 32 rlp 0 rtt 0
fgntfg
%d замени на %w и напиши value = tonumber(value)
fgntfg
кажется [[:digit😏] тоже должно помочь
fgntfg
или я уже языки путаю
akamit
%d замени на %w и напиши value = tonumber(value)
нет, все равно съедает после точки :(
Snusmumriken