@ProLua

Страница 84 из 307
Рома
23.04.2017
07:38:54
Ага, я понял, это реализация асинхронности через udp!

Да?

Snusmumriken
23.04.2017
07:40:05
Имхо очень забавно. Да, да. Асинхронность в сетевом взаимодействии. При получении сообщеньки определённого типа, вызываем соответствующий колбек, с аргументами "данное соединение" и "декодированные данные сообщения". Если нет сообщенек - передаём исполнение кода дальше. Эта штука тоже не блокирует, ежели чё, ибо её задача - встраиваться, например, в игру. Помимо приёма сетевых данных, игрушка должна ещё много что делать, например, рендерить графон. Примеры использования есть на этом же гите, в state/client и state/server. В функции client:load и server:init лежат всякие callback:connect или callback:wupdate какой-нибудь. Это оно самое.

Vlad
23.04.2017
14:43:19
как в луне можно реализовать некое подобие инкапсуляции, и можно ли? а нужно ли?

Google
Vlad
23.04.2017
15:20:02
и кстати если мы делаем в таблице дырки они же так и сохраняются? ну тобишь со временем ничего никуда не смещается и мы постоянно будем иметь таблицу с дырками? вроде да, но вроде как если катаемся по таблице и копируем ее значения в другую, то дырки не учитываются и очередность не нарушается то есть если у нас 1- nil | 2- 2 | 3 - 3 | 4 - nil | 5 - 5 | 6 - 6 | 7 - nil | 8 - 8 | 9 - 9 то получим 1 - 2 | 2 - 3 | 3 - 5 | 4 - 6 | 5 - 8 | 6 - 9 причем если копировать через pairs то так катает, через ipairs не работает почему то вообще, что интересно потому как через #table к примеру спокойно идет по таблице и выводит результаты не обращая никакого внимания на дырки и их количество где ты Мумрик? всегда поймет и обьяснит

Philipp
23.04.2017
15:24:53
Что?

Vlad
23.04.2017
18:04:36
как получить количество аргументов передаваемых функции? ну если кидать в функцию просто таблицу с ними то одно, а так есть ли способ с обычными аргументами?

Philipp
23.04.2017
18:07:55
Тебе нужно из функции получить количество полученных аргументов?

Vlad
23.04.2017
18:10:28
ну не получить как результат, а просто узнать думал что то типа если foo(table) - то там проще, просто считать таблицу, а можно еще проще, просто через foo(...)

Рома
23.04.2017
18:13:35
select('#', ...) - количество

сначала погуглил, потом ещё погуглил, я это не знаю откуда знаю, вывод что в гугле довольно базовую вещь найти непросто

Philipp
23.04.2017
18:14:39
Научитесь пользоваться гуглом

Пожалуйста

Рома
23.04.2017
18:15:10
ок, и как это загуглить?

Vlad
23.04.2017
18:15:37
зачем? тут то мы вопросы задаем и ответы получаем, смысл чата тогда?

Philipp
23.04.2017
18:15:40
vararg lua

how to get number of arguments in vararg function lua

Google
Philipp
23.04.2017
18:16:11
зачем? тут то мы вопросы задаем и ответы получаем, смысл чата тогда?
В том, чтобы задавать сложные вопросы и получать помощь по местам, которые не понимаешь

А не спрашивать то, что написано в официальном мане языка

Рома
23.04.2017
18:17:53
да я вот думаю портал о луа, надо, не надо, склоняюсь к тому что не надо, но блин а вдруг что-то хорошее получилось бы

вот уже название и шапочку придумал

если все гуглится

Snusmumriken
23.04.2017
18:30:07
Ох :3 Таблицы с дырками - это проблема. Старайтесь не делать таблиц с дырками. ipairs идёт по таблице пока не наткнётся на дырку, #tbl показывает предельное значение в таблице. Для таблиц с дырками, по хорошему, стоит мутить отдельный класс, со своим итератором, и метаметодом __newindex, который затыкает дырки при добавлении новых значений. А лучше - связный список.

Vlad
23.04.2017
19:47:57
какой вариант лучше? такой : tab[1] = function(arg1) --[[work with]] end tab[2] = function(arg1,arg2) --[[work with]] end tab[3] = function(arg1,arg2,arg3) --[[work with]] end tab[N] = function(arg1,arg2,arg3,argN) --[[work with]] end или такой : function tab.func1(arg1) --[[work with]] end function tab.func2(arg1,arg2) --[[work with]] end function tab.func3(arg1,arg2,arg3) --[[work with]] end function tab.funcN(arg1,arg2,arg3,argN) --[[work with]] end хотя сам больше к первому

Snusmumriken
23.04.2017
19:49:27
Такой: function tab(...) local args = {...} [work with] end

Рома
23.04.2017
19:50:13
Между прочим, {...} лишний раз - плохо, так как лишняя табличка - зло

select отлично справляется

Snusmumriken
23.04.2017
19:50:29
Да, в таких случаях можно пользоваться селектом. Хех, кстати забавная идея, сделать итератор для множества аргументов, без плодения таблиц.

Vlad
23.04.2017
19:51:32
ние ние, предположм тиаритишски что тут простые но в тоже время сложные потуги сделать перегрузку я не делал много фукнций с разными переменными только потому что не хочу работать со всеми разом, просто от количества меняем поведение а с селектом да local num = select( "#", ... ) а потом просто тыкаем этим куда нужно

Snusmumriken
23.04.2017
19:55:36
Хех, столкнулся с забавной ошибкой на итераторе: function itouple(...) local i = 0 return function() i = i + 1 local v = select(i, ...) if v then return i, v end end end for i, v in itouple('a', 'b', 'c', 10, 20, 30) do print(i, v) end Ошибка: cannot use '...' outside a vararg function near '...'

Рома
23.04.2017
19:57:03
> Между прочим, {...} лишний раз - плохо, так как лишняя табличка - зло

В этом случае {...} это не лишний раз

а необходимый

Snusmumriken
23.04.2017
19:57:47
Если функция не так часто вызывается - то норм. Или если памяти много и тебе пофиг на сборку мусора. На работке, у серверов обычно гигов 32-128 памяти, там пофигу на мусор, лишь бы быстро отработало.

Рома
23.04.2017
19:58:19
вероятно, ... это фича самого языка и он дергает переменные прямо из стека, вот и не может к ним обращаться потом когда-нибудь из колбека

все логично!

Google
Snusmumriken
23.04.2017
20:00:10
... - это скрытый тип данных, называется "кортеж". Они же используются при присвоениях: a, b, c = c, a, b Фактически, тут создаются два кортежа, которые обмениваются значениями, и по указателям на переменные заполняются новые значения конечного кортежа. Поэтому это так работает.

И, возможно, кортежи не могут существовать в замыканиях, потому что тип данных рассчитан не на хранение а на моментальное использование. Возможно, как раз за счёт хранения на стеке.

Рома
23.04.2017
20:01:53
c, a, b могут быть в любом порядке?

... строго слева направо достается селектом

вот и не верю, это стек

может пруф на сорц?

Snusmumriken
23.04.2017
20:04:31
Ну как тебе сказать. 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

А select - функция для работы с кортежами, да. unpack - превращает таблицу в кортеж.

Рома
23.04.2017
20:06:41
Я о том, что когда пишешь на сишечке по луа апи, то там есть стек - очередь значений, и можно их пушить, то есть перебирать поочередно, a, b, c = ... поочередно достает значения из этого стека

при чем тут котреж?

как текст разукрашиваешь?

Snusmumriken
23.04.2017
20:08:29
Ох, а я про то как ты пользуешься луа-фигнёй :3 Кстати, стак луа-машины и стак процессорный - разные штуки. Стак машины - считай что обычный массив, в который можно напихать значений для того чтобы передать в луа и из луа. Ну, точнее массив структур с типами и указателями на куски памяти с данной структурой. Всякие pushnumber/pushtable - делают грязную работу типизации.

Snusmumriken
23.04.2017
20:19:29
Да, кажется, мне скоро надоест описывать всякую лабуду типа кортежей каждый раз новым людям, поэтому есть смысл замутить блок с "частыми вопросами".

Ruslan
23.04.2017
20:21:46
Бота-справочника написать и в чат добавить ?

Snusmumriken
23.04.2017
20:22:46
Отвечать он будет в манере: "Ну ёб вашу мать, это же и дебилам понятно, что такое кортежи, дуй в википедию блин а то чо как лох". Теперь мне нравится эта идея ещё больше.

Рома
23.04.2017
20:26:43
В википедии непонятно написано

Philipp
23.04.2017
20:26:47
Кто агрится на примитивные вопросы(

Admin
ERROR: S client not available

Snusmumriken
23.04.2017
20:27:15
Ну, я не агрюсь, а бот будет агриться в шутливой манере, потому что это весело :3

Google
Alex Фэils?︙
23.04.2017
20:27:20
Snusmumriken
23.04.2017
20:27:48
Во, у меня есть бот, который умеет в несмешные цитаты с башорга. Это тоже можно.



Vlad
23.04.2017
20:48:34
чрезмерное количество таблиц сильное зло?

Snusmumriken
23.04.2017
20:50:32
Чрезмерное количество чего угодно - всегда зло. Чрезмерное же. Со строками та же фигня. В целом - чем меньше плодится в часто вызываемых функциях - тем лучше. Чем реже вызывается функция, тем пофигистичнее.

Vlad
23.04.2017
20:52:39
table[][][] ну значит такие конструкции уже зашквар?

Philipp
23.04.2017
20:54:50
Snusmumriken
23.04.2017
20:55:12
Если критично к скорости исполнения - да.

А, да, table[][][] - не зашквар, если объявляется один раз а потом используется. Если объявляется локально, потом заполняется тысячами значений и почти тут же удаляется и так происходит много раз в секунду на критичных к скорости/потреблению памяти местах - зашквар.

Vlad
23.04.2017
21:16:19
карочи рубрика, а я вам тут сладкого хлебушка покушать занес

Snusmumriken
23.04.2017
21:52:41
Попробую замутить свой удобный оверлоад, с типизацией.



Фактически, это табличка со списком {numbernumberstring = function() ... end}, а при вызове - проверяются аргументы и вызывается соответствующая типам аргуметов функция. Если опираться не на типы а на количество - можно гораздо быстрее исполнять, но не так удобно. Но зато встроенная проверка типов, что не может не радовать.

То же самое, но с ориентацией на количество аргументов. Когда важнее скорость. Можно и в более ООПшном стиле но лень. 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 Такие пироги.

Group Butler [beta]
24.04.2017
07:34:54
Добро пожаловать в чат pro.lua, Alex! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

fgntfg
24.04.2017
08:03:06
А разьве нельзя написать что-то типа function add(...) local t = {...} for _,a in pairs(t) if(typeof(a)=='number') end if(typeof(a)=='string') end etc

мне кажется вы переусложняете

Snusmumriken
24.04.2017
08:32:54
Можно. Я обычно так и делаю, но товарищ хочет перегрузку с разными функциями под разные типы. Плюс сильно зависит от того, сколько всякой перегруженной фигни в модуле. Если одна-две функции, то норм. Если штук двадцать (допустим, библиотека работы с векторами, которая воспринимает как векторы так и числа и таблицы в качестве аргументов) - то задолбаешься. Я про крайней мере задолбался пока делал, и писал отдельные помогающие функции.

fgntfg
24.04.2017
08:34:49
можно сделать таблицу c = table[typeof(var)](a,b)

Snusmumriken
24.04.2017
08:37:10
Прохожий вариант в моем первом примере. И, прошу заметить, он довольно удобный.

Google
Group Butler [beta]
25.04.2017
14:17:40
Добро пожаловать в чат pro.lua, Marina! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Marina
25.04.2017
14:17:43
Ребята, может кому-то полезен будет бесплатный митапчик от мейла по аналитике мобильных приложений?) https://corp.mail.ru/ru/press/events/339/

Alex
25.04.2017
14:24:05
Ребята, может кому-то полезен будет бесплатный митапчик от мейла по аналитике мобильных приложений?) https://corp.mail.ru/ru/press/events/339/
сколько можно флудить этим вашим мейлсру с митапами по диалогах? не первый день вижу это объявление

Octo@dshacks
25.04.2017
15:02:00
Пора допиливать моего бота-фильтра

Чтоб все мэилрушные ссылки блочил

Страница 84 из 307