7
/ghzen@FailsBot
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
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
Попробовал Lapis, неплохая штука
Anonymous
Спасибо вам за ваши ответы
Kukuzapa
Попробуй sailor
akamit
привет, подскажите пожалуйста, как лучше распарсить такую строку a=1;b=2;c=3 на переменные? (ключ и значение)
Yuriy
gsub
akamit
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
можно без индекса
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
вообще при всей бедности интерфейса у луа работа со строками довольно гибкая
fgntfg
akamit
fgntfg
И? Зачем её быть на подстроки, чтоб их потом парсить?
akamit
а ну да)
Snusmumriken
fgntfg
если строка заканичвается на ; то всё будет не очень хорошо
akamit
akamit
вот только все после точки отрезает :(
Snusmumriken
fgntfg
Вот теперь я не вижу багов.
fgntfg
Пофиксил
а две ; подряд не заставит ли цикл завершиться? Я хоть убей не помню, что вернёт match
Snusmumriken
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
Snusmumriken