Roman
c, a, b могут быть в любом порядке?
Roman
... строго слева направо достается селектом
Roman
вот и не верю, это стек
Roman
может пруф на сорц?
Snusmumriken
Ну как тебе сказать. a, b, c = 10, 20, 30 a, b, c = c, b, a -> 30, 20, 10 Переменные спокойно меняются значениями. function foo(...) local a, b, c = ...; return a, b, c end print(foo(10, 20, 30, 40, 50, 60)) -> 10, 20, 30
Snusmumriken
А select - функция для работы с кортежами, да. unpack - превращает таблицу в кортеж.
Roman
Я о том, что когда пишешь на сишечке по луа апи, то там есть стек - очередь значений, и можно их пушить, то есть перебирать поочередно, a, b, c = ... поочередно достает значения из этого стека
Roman
при чем тут котреж?
Roman
как текст разукрашиваешь?
Snusmumriken
Ох, а я про то как ты пользуешься луа-фигнёй :3 Кстати, стак луа-машины и стак процессорный - разные штуки. Стак машины - считай что обычный массив, в который можно напихать значений для того чтобы передать в луа и из луа. Ну, точнее массив структур с типами и указателями на куски памяти с данной структурой. Всякие pushnumber/pushtable - делают грязную работу типизации.
Snusmumriken
Да, кажется, мне скоро надоест описывать всякую лабуду типа кортежей каждый раз новым людям, поэтому есть смысл замутить блок с "частыми вопросами".
Korsar
Бота-справочника написать и в чат добавить 😜
Snusmumriken
Отвечать он будет в манере: "Ну ёб вашу мать, это же и дебилам понятно, что такое кортежи, дуй в википедию блин а то чо как лох". Теперь мне нравится эта идея ещё больше.
Roman
В википедии непонятно написано
Snusmumriken
Ну, я не агрюсь, а бот будет агриться в шутливой манере, потому что это весело :3
Snusmumriken
Во, у меня есть бот, который умеет в несмешные цитаты с башорга. Это тоже можно.
Snusmumriken
Чем менее смешные шутки тем лучше. В этом дзен.
B
чрезмерное количество таблиц сильное зло?
Snusmumriken
Чрезмерное количество чего угодно - всегда зло. Чрезмерное же. Со строками та же фигня. В целом - чем меньше плодится в часто вызываемых функциях - тем лучше. Чем реже вызывается функция, тем пофигистичнее.
B
table[][][] ну значит такие конструкции уже зашквар?
Snusmumriken
Если критично к скорости исполнения - да.
Snusmumriken
А, да, table[][][] - не зашквар, если объявляется один раз а потом используется. Если объявляется локально, потом заполняется тысячами значений и почти тут же удаляется и так происходит много раз в секунду на критичных к скорости/потреблению памяти местах - зашквар.
B
карочи рубрика, а я вам тут сладкого хлебушка покушать занес
Snusmumriken
Попробую замутить свой удобный оверлоад, с типизацией.
Snusmumriken
Замутил. Правда, для сравнительно редких функций. Зато можно цеплять к объектам.
Snusmumriken
Фактически, это табличка со списком {numbernumberstring = function() ... end}, а при вызове - проверяются аргументы и вызывается соответствующая типам аргуметов функция. Если опираться не на типы а на количество - можно гораздо быстрее исполнять, но не так удобно. Но зато встроенная проверка типов, что не может не радовать.
Snusmumriken
То же самое, но с ориентацией на количество аргументов. Когда важнее скорость. Можно и в более ООПшном стиле но лень. function simpleloaded() local o, mt = {}, {} function o.add(count, f) o[count] = f end function mt:__call(...) local f = self[select('#', ...)] if f then return f(...) else error('No function with #'..select('#', ...)..' keys') end end return setmetatable(o, mt) end foo = simpleloaded() foo.add(0, function() return 10 end) foo.add(1, function(a) return a + 10 end) foo.add(2, function(a, b) return a + b + 10 end) foo() -> 10 foo(10) -> 20 foo(10, 20) -> 40 foo(10, 20, 30) -> error Такие пироги.
fgntfg
А разьве нельзя написать что-то типа function add(...) local t = {...} for _,a in pairs(t) if(typeof(a)=='number') end if(typeof(a)=='string') end etc
fgntfg
мне кажется вы переусложняете
Snusmumriken
Можно. Я обычно так и делаю, но товарищ хочет перегрузку с разными функциями под разные типы. Плюс сильно зависит от того, сколько всякой перегруженной фигни в модуле. Если одна-две функции, то норм. Если штук двадцать (допустим, библиотека работы с векторами, которая воспринимает как векторы так и числа и таблицы в качестве аргументов) - то задолбаешься. Я про крайней мере задолбался пока делал, и писал отдельные помогающие функции.
fgntfg
можно сделать таблицу c = table[typeof(var)](a,b)
Snusmumriken
Прохожий вариант в моем первом примере. И, прошу заметить, он довольно удобный.
Anonymous
Ребята, может кому-то полезен будет бесплатный митапчик от мейла по аналитике мобильных приложений?) https://corp.mail.ru/ru/press/events/339/
Alex
Ребята, может кому-то полезен будет бесплатный митапчик от мейла по аналитике мобильных приложений?) https://corp.mail.ru/ru/press/events/339/
сколько можно флудить этим вашим мейлсру с митапами по диалогах? не первый день вижу это объявление
Marvin
Пора допиливать моего бота-фильтра
Marvin
Чтоб все мэилрушные ссылки блочил
fgntfg
mail, кстати, больше всех из российских компаний за Lua топит.
Snusmumriken
Интересно почему.
Nikolay
совпадение?
vvzvlad
пусть топит, не сломайте.
Snusmumriken
Видимо, Марина не ознакомилась с правилами чата (( Хочу устроить анонимное голосование на тему "Какой процент местных чуваков интересуется монетизацией маркетингом рекламе в приложениях и прочем заработке трёх копеек на своих поделках-на-коленке, вместо того чтобы программы писать"
Alex
для всех игр от mail.ru аддоны пишутся на lua и плюс проводя мероприятия для lua'шников они в веб-маркетинге продвижения хотят себе расширить аудиторию потребителей за счёт этих же самых lua'шников
Tverd
кстати, лично мне интересна монетизация... и хочется не 3 копейки. Другое дело, что может там ничего нового не скажут... ну есть такой шанс
Snusmumriken
Нет шансов. Ну, он меньше полупроцента.
🦥Alex Fails
Опаньки, привет)
🦥Alex Fails
Добро пожаловать в чатик про.луа
Андрей
Привет :)
🦥Alex Fails
Привет :)
В скайпе есть общие знакомые (см пак стикеров)
🦥Alex Fails
Андрей
Меня в скайпе нет .____.
Андрей
Okay.
Андрей
Вот так бывает: только зайдешь в чатик про Луа, и сразу общие знакомые обнаруживаются .____.
Alexey
в Мэйле помимо игрового дивизиона Lua используется в Tarantool, как встроенный язык
Alexey
и с луа там много хороших штук можно сделать :)
Snusmumriken
Ну, технически, тарантул = бд + планировщик скриптов. Можно сервак на нём поднимать, и всё такое.
Tverd
о, а кто-нить делал на тарантуле pubsub?
Snusmumriken
Не а, я много что делал на штуке похожей на тарантул (кронос про). Тоже БД со встроенной луа.
Tverd
а такое вот делал? я про паб саб
Snusmumriken
Ты имеешь ввиду, центр событий, который рассылает сообщеньки подписавшимся?
Snusmumriken
Я такое в качестве бота телеграмма делал.
Nikolay
/promote
🦥Alex Fails
Хм. 400. Если у нас сообщение с командой, которое нкжно для реплая сдохло. Надо взять на заметку
🦥Alex Fails
/ghzen@FailsBot
FailsBot
/ghzen@FailsBot
Encourage flow.
🦥Alex Fails
/ghzen@FailsBot
FailsBot
/ghzen@FailsBot
Non-blocking is better than blocking.
Snusmumriken
/ghzen@FailsBot
FailsBot
/ghzen@FailsBot
Avoid administrative distraction.
🦥Alex Fails
Блин. их апи порой медленно отвечает(
🦥Alex Fails
Надо sendChatAction добавить, чтоб хоть в чате видно было, что бот шевелится
Tverd
Ты имеешь ввиду, центр событий, который рассылает сообщеньки подписавшимся?
да, вот сижу и думаю как мне подойти к этому вопросу...
Snusmumriken
1. Список типов событий и подписавшихся к этим событиям 2. Цикл событий а ля входящих сообщений. Некоторые события могут быть служебными, типа "Хачу палучать саабщения этаво типа!" и "Нихачу больше этих саабщений"
Tverd
ага, я подумаю, ведь надо еще понимать что событие рассылается по очередям каждым подписчикам, если они подключены... а если отвалены, то либо делать событию какой-то тайм аут, либо без оного... тут не понятно
Tverd
пошел во сне подумаю )))
Snusmumriken
Тогда список обновляемых подписчиков. Связь с подписчиком - пинговка. Карочи, менеджер соединений, к которому подключаются клиенты, сообщенькой вида: "Хаччу такие мессаги". Раз в пять минут - пинговка, если соединение - UDP. Если TCP - всё гораздо проще. При непрохождении пинговки - отключаем клиента (с UDP-сообщением, мол, отключили, если UDP). Список типов сообщений содержит в себе список соединений, которым надо отправить (хранятся в слабой таблице {__mode = 'kv'}, чтобы удалившись из списка клиентов, чувак удалился и из списка рассылок). Когда клиент подключается, сервер добавляет его в список подключений и просматривает спискок подписок, и запихивает его и туда тоже. Допустим, приходит сообщение определённого типа. Просматриваем список народа в подписке на текущий тип сообщения и переправляем им всю фигню. Таким образом, кстати, один чувак может подписаться сразу на несколько типов сообщений.
Tverd
Снус, это я тоже понимаю, просто хотел готового, велосипедить не шибко мое, но видать придется...