
0x9d8e
09.02.2017
20:08:09
А что он вернёт?

Tverd
09.02.2017
20:08:10
это будет быстрый tail call
вернет компоненту

0x9d8e
09.02.2017
20:08:40
компоненту?

Google

Tverd
09.02.2017
20:09:07
там ошибка у тебя, cmpnt где?

0x9d8e
09.02.2017
20:09:41
ой)
прочитал, вернёт собственно удалённый элемент
ну да, пригодится, если его перемещать, например

Tverd
09.02.2017
20:11:07
и это, сначала сделай local types = self._.... , а потом уже if
ага, норм

0x9d8e
09.02.2017
20:13:46
Шесть обращений к полю таблицы дороже, чем три + создание локальной переменной?
Или это только для читаемости?

Tverd
09.02.2017
20:14:25
ну смотрится лучше однозначно ) а насчет скорости - не видел разницы, пробовал и так и так...

0x9d8e
09.02.2017
20:14:41
Ну ок, спасибо :)

Tverd
09.02.2017
20:15:03
пожалуйста ) люблю когда код красивый

0x9d8e
09.02.2017
20:18:54
Кстати, а нужна ли эта проверка перед циклом:
if(types) then
for i = 1, #types do
?
А то вдруг #nil возвращает 0, и тогда можно этот иф убрать.

Google

Tverd
09.02.2017
20:19:51
дык проверь )
кстати, а как код писать? тэги?

0x9d8e
09.02.2017
20:21:10
Три `
в начале и в конце

Tverd
09.02.2017
20:21:27
print()
отлично, спасибо

0x9d8e
09.02.2017
20:21:51
Исключение кидает. Ну значит придётся с условием.

Tverd
09.02.2017
20:22:00
так вот тож )
Уважаемые, а кто нить рисует в чем нить сцены?
string.split = function(self, sep, result)
if sep == nil then
sep = ' '
end
if result == nil then
result = { }
end
local cur, idx = 1, #result + 1
local s1 = self:find(sep, cur, true)
while s1 do
result[idx] = self:sub(cur, s1 - 1)
cur = s1 + 1
s1 = self:find(sep, cur, true)
idx = idx + 1
end
result[idx] = self:sub(cur)
return result
end
Подарок вам )

Alex Фэils?︙
10.02.2017
07:54:11
О, тут как раз кто-то искал такую вещь

yegorf1
10.02.2017
07:54:41
sep = sep or ' '

Tverd
10.02.2017
07:54:41
самая быстрая реализация, что сделал... Но разбивает по одному символу

Alex Фэils?︙
10.02.2017
07:54:56

Tverd
10.02.2017
07:55:04

yegorf1
10.02.2017
07:55:25
А, понятно

Tverd
10.02.2017
07:55:56
можно подукрасить )
есть вариант и для нескольких символов
если надо кому

Google

Snusmumriken
10.02.2017
09:29:39
Хм. Всю дорогу использовал:
for line in (str..delm):gmatch('(.-)'..delm) do
...
end
Тут конечно лишняя нагрузка на сборку мусора, и если сплитить огромные объемы - можно не добавлять к строке разделитель, обрабатывая последнее найденное отдельно. Но это самый короткий вариант. Так - да, find и sub работают реально быстро.

Tverd
10.02.2017
09:34:45
ну надо подумать над итератором... У меня есть недописаная либа с итераторами...
если огромные объемы, а нужно несколько элементов - итераторы смогут облегчить работу

Snusmumriken
10.02.2017
09:35:30
Можно объединить и эти два метода:
strings.find возвращает два аргумента: начало и конец того что нашел, в результате - регулярка вида '(.-)'.. delimiter, после запихивания в string.find, выдает обе границы того что нашел. Можно смело sub'ать, отсекая с конца длину разделителя.

Tverd
10.02.2017
09:36:48
Попробуй, очень интересно

Snusmumriken
10.02.2017
09:37:47
Последний элемент тоже придется обрабатывать отдельно, но это не сложно, как раз если запоминать предыдущие значения.

Tverd
10.02.2017
09:38:02
да, щас скину мультипоиск
-- This split multiple separators
string.split_multi = ( sep = ' ', result = {} ) =>
cur, idx = 1, #result + 1
patt = ('([^%s]+)')\format(sep)
str = @match(patt, cur)
while str
result[idx] = str
cur = cur + str\len() + 1
str = @match(patt, cur)
idx += 1
result

Snusmumriken
10.02.2017
09:39:06
Это на мунскрипте?

Tverd
10.02.2017
09:39:11
я-я

Group Butler [beta]
10.02.2017
10:09:55
Добро пожаловать в чат pro.lua, Droff! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Snusmumriken
10.02.2017
12:02:10

Snusmumriken
10.02.2017
12:03:19
я-я
Как раз твой вариант адаптировал в сторону итератора, и добавил возможность произвольного размера разделителя.

Tverd
10.02.2017
12:03:40
а скинь код плиз, потестю

Snusmumriken
10.02.2017
12:03:53
function splitb(str, sep, result)
sep = sep or ','
seplen = #sep
result = result or {}
local cur, i = 1, 0
local s1 = str:find(sep, cur, true)
local lastflag = false
return function()
i = i + 1
if lastflag then return nil end
if not s1 then lastflag = true; return i, str:sub(cur) end
local part = str:sub(cur, s1 - 1)
cur = s1 + seplen
s1, s2 = str:find(sep, cur, true)
return i, part
end
end

Tverd
10.02.2017
12:04:02
ага, гуд

Snusmumriken
10.02.2017
12:05:23
Флаг последнего участка - дабы корректно обрабатывать хвост.
Можно было бы к оригинальной строке добавить разделитель в хвост, но если строка весит 3гб - это означает засирание памяти на 3гб, и тут же удаление из памяти тех же 3гб.

Tverd
10.02.2017
12:05:35
Не понял что идет в sep? стринг или тейбл?

Snusmumriken
10.02.2017
12:05:50
sep - разделитель, строка же.
separator

Google

Tverd
10.02.2017
12:05:59
#sep что даст?

Snusmumriken
10.02.2017
12:06:21
Длину разделителя.
Разделитель '!! !!'? Его длина - пять символов.

Tverd
10.02.2017
12:06:23
sep:len()

Snusmumriken
10.02.2017
12:06:29
Да, так тоже можно.

Tverd
10.02.2017
12:06:42
о как... решетка дает длину строки? хм

Snusmumriken
10.02.2017
12:07:05
Решётка - дёргает метаметод __len у каждого объекта, который имеет мета-таблицу. Строки её имеют, там в __index - таблица string, и набор метаметодов для конкатенации и прочей фигни.

Tverd
10.02.2017
12:07:37
пипец... когда это появилось? я все пропустил ))))))))))))

Admin
ERROR: S client not available

Tverd
10.02.2017
12:08:43
result не используется у тебя

Snusmumriken
10.02.2017
12:08:48
А ещё, смотри, ты можешь сделать так:
arr = setmatatable({}, {__index = table})
и после этого сразу:
arr:insert(value)
arr:remove(value)
arr:sort()
Строки используют аналогичный механизм.
Кстати да, не успел вычистить.

Tverd
10.02.2017
12:09:30
не, насчет метатаблиц я в курсах... я просто не помню что бы в 5.1 __len работал

Snusmumriken
10.02.2017
12:09:40
Хм. В Liajit - Точно работает.
В чистой 5.1 ща гляну.

Tverd
10.02.2017
12:09:57
ну уже увидел,и правда
и в 5.1 тоже

Snusmumriken
10.02.2017
12:10:21

Tverd
10.02.2017
12:12:31
ага, s2 можно почистить... не используется
ну а так гуд... классно
a = setmetatable({}, {__len = function() return 10 end})
print(#a)
не, в 5.1 и луаджите не работает. В 5.2 - да

Google

Snusmumriken
10.02.2017
12:20:53
А, всё проще. Версия luajit 2.0.0-beta8
>From Lua 5.2: __len metamethod for tables (disabled by default).

Tverd
10.02.2017
12:25:50
ну да, у тебя какая версия?
LuaJIT 2.0.4 — Copyright (C) 2005-2015 Mike Pall. http://luajit.org/
моя

Snusmumriken
10.02.2017
12:38:31
Смотря где.
love2d - 2.0.4, которая стабильная.
Чистый luajit - 2.1.0-beta2, для всяких читов с микросервисами.
И то и то использую x32-битные за ради совместимости.

Tverd
10.02.2017
12:40:32
понятно, надо свой значит собирать луаджит мне

Snusmumriken
10.02.2017
12:40:53
Зачем?
Берёшь luapower и получаешь luajit под венду с большим набором либ, скомпиленных ровно под эту версию.

Tverd
10.02.2017
12:41:31
хотя пока не горит, длина особо не нужна, а если и нужна то len могу тупо написать...

Snusmumriken
10.02.2017
12:41:50
А, да пофигу, расслабься :3
Luajit по базе имеет неплохое количество расширений, по сравнению с ванильной 5.1

Tverd
10.02.2017
12:42:09
))))
А в чем пишешь? саблайм?

Snusmumriken
10.02.2017
12:50:47
Использовать через raw-ссылки, типа:
Class = webrequire'http://pastebin.com/raw/K1yRyE1T'
Правда, не работает по https, потому что сокеты не работают с https по умолчанию, нужны либы с криптографией, которые есть на линуксах но не на вендах.
Саблайм слишком жирный и медленный, меня это несколько раздражает. И нет нескольких нужных мне фич (особенно - древовидное сворачивание кода, когда внутри свёрнутого блока есть другой свёрнутый блок). Их можно написать, но пока буду адаптировать - пройдёт слишком много времени.

yegorf1
10.02.2017
13:05:26
Задолбал хвастаться
"слишком жирный и медленный"
Фига у тебя запросы

Snusmumriken
10.02.2017
13:55:58
Ну, эта фигня может кому-то понадобиться, для быстрого юзания скриптов.
Нет, git-консоль на love2d я пока не сделал :<
Запросы - какие есть, щито поделать, у меня синдром утёнка после np++, и синдром петуха после.. Оу, лишнее :3

Tverd
10.02.2017
15:59:02
Кстати, чем VS не устраивает?

Ixtis
10.02.2017
16:26:26
Да, мне VS тоже очень даже сипатичен

yegorf1
10.02.2017
17:01:12