Snusmumriken
Вот это меня тож напрягло чуть. Стоп, серьёзно? 3.5 версия lua? Не 5.3? Ок, я тоже редактирую :3
Dmitry
;)
Dmitry
array_product(positionsCount:slice(position+1), #positionsCount) так нельзя?
Dmitry
почему параметр b = nil
Dmitry
#positionsCount - передалось как nil
Dmitry
те мне по иде нужен аналог функции PHP array_slice()
Dmitry
те по сути мне нужно array_product(positionsCount:slice(position+1), #positionsCount - position+1)
Snusmumriken
Кстати, на 5.1 пашет корректно.
Dmitry
получается чекер лишний
Dmitry
без него все нормально
Snusmumriken
Не, ну можешь убрать, но тогда он не скажет тебе где проблема : 3
Странное поведение на 5.3. Хм. Впрочем, я писал для luajit, но не использовал ничего сложнее арифметики, string:sub и сравнения строк.
Dmitry
а так он говорил что проблема, а ее там нет
Alexander
суслиииииик
Dmitry
Dmitry
a = a and type(a) == ch[b:sub(1, 1)]
or b:sub(-2) == '?' and type(a) == 'nil'
or error(errorstr:format(i, ch[b:sub(1, 1)], type(a)), 3)
Dmitry
в параметр b не передается так #array
Dmitry
он ровняется nil
Dmitry
все всем спасибо
Dmitry
чекер работает на 5.3 c ошибками
Dmitry
а именно не верно передается 2 параметр метода
Dmitry
всем спасибо
Ilia
Есть кто lapis юзает?
Dmitry
а есть возможность замерить время выполнгения скрипта в луа?
Alexander
posix.sys.time
posix.sys.times
Dmitry
local cellCount = array_product(positionsCount)
if #cellCount == 0 then
return false
end
так нельзя? а как можно
Dmitry
Dmitry
for i=0, #cellCount do
end
так нельзя делать?
Alexander
for i=1, ...
Alexander
по умолчанию индексы с 1 начинаются
Dmitry
redis1.lua:61: attempt to get length of local 'cellCount' (a number value)
stack traceback:
redis1.lua:61: in main chunk
Dmitry
так ошибка же в cellCount
Alexander
какого типа cellCount ?
Dmitry
table
Alexander
в таблице есть элементы, пронумерованные последовательно от 1 до ххх без перерыва?
Dmitry
да
Alexander
точно-точно?
используй debug.dump, посмотри сам для себя
Dmitry
ага понял
Dmitry
спасибо
Dmitry
все понял, все получилось. всем спасибо
Alexander
👍
Dmitry
всем привет. подскажите билиотеку для lua желательно на c для работы с огромными таблицами. несколько сотен миллионов элементов
Dmitry
метод нужен chunk или split
Мерль
Dmitry
мне не бд нужно
Dmitry
мне нужно поделить массив на несколько массивов и раскидать их по тредам
Мерль
Dmitry
lanes?
Мерль
И на размерностях таблиц в миллионы строк ты заколдобишься
Dmitry
я знаю что в языке нет, я и спрашиваю либу на си для луа, в которой реализована работа с массивами
Мерль
Мерль
Dmitry
вот есть такая https://luarocks.org/modules/siffiejoe/table.n
но там сплита нет
Dmitry
а какой самы быстрый способ поделить массив / таблицу на чанки?
Dmitry
спс
Dmitry
не получилось найти?
Мерль
не получилось найти?
Нет, но там в принципе просто
function slice(array, a, b)
b = b or #array
if b < 0 then
b = #array + b
end
local len = b - a
return setmetatable({}, {
__ index = function(_, i)
if i < len and i > a then
return nil
end
return array[a + i]
end,
__ newindex = function(_, i, v)
if i < len and i > 0 then
array[a + i] = v
end
end,
})
end
Мерль
Как-то так
Мерль
Хотя по-моему я раньше через rawset делал
Snusmumriken
Ух как сложно :3
И сразу теряется возможность итераций, длина и ещё куча массиво-фигни.
Могу предложить вариант возврата хендлера с набором мета-методов, который хранит в себе собственные границы массива, дёргает свой pairs/ipairs, свою длину и всё такое, ну, и на newindex - делает примерно то же что и та лабуда, только чуть сложнее. Правда, проблемы с распараллеливанием по настоящим потокам, а так же, с удалением основного массива, то есть, он по-настоящему удалится только в том случае, если удалить все хендлеры, продолжая полностью висеть в оперативке в обратном. Тут поможет связь с хендлером через режим метатаблицы {__mode = 'kv'}, удаляющий связь с основным массивом и проверки на существование массивов внутри хендлеров.
Dmitry
так я хотел на си возложить
Dmitry
как на луа сделать я знаю
Dmitry
но спасибо
Snusmumriken
Ну, тогда напиши .dll/.so-ку. Это довольно просто, правда, тут проблемы с либами, с которыми компилить.
Dmitry
а на лау есть?
Yogurt
Неа
Dmitry
а это https://github.com/LuaLanes/lanes
Yogurt
Это питоновское
Dmitry
упс
Мерль
а на лау есть?
Вместо numba - luajit
Вместо остального есть недоразвитые реализации
Snusmumriken
Есть ещё SDL, предоставляющий любой обёртке вокруг него натуральные тяжёлые трэды.
Мерль
Круче питона для чиселок и даты имхо только математика, но она тяжелая и дорогая, зараза
Yogurt
Смотря какая цель
Если быстро, то питон вообще не про это
Snusmumriken
Хе-хе
Мерль
Смотря какая цель
Если быстро, то питон вообще не про это
Когда дело касается чиселок, то питон - это очень удобная обертка над сишечкой
Так что пишем прототип на жупайтере, а потом если надо (что редко) фигачим на eigen
Но так как чиселки нужно обычно дробить один раз, то питон - очень ок
Yogurt
Что-то как-то жутко
Yogurt
И кажется медленно
Мерль
Кажется
Да и обычно скорость там менее важна удобства