Snusmumriken
Вот это меня тож напрягло чуть. Стоп, серьёзно? 3.5 версия lua? Не 5.3? Ок, я тоже редактирую :3
Dmitry
;)
Dmitry
array_product(positionsCount:slice(position+1), #positionsCount) так нельзя?
Dmitry
почему параметр b = nil
Alexander
array в этом примере - название переменной, которая ссылается на таблицу с реализованными методами типа slice и остальными.
кстати, для ясности - в луа "метод" - это обычная переменная, которая ссылается на функцию. то есть mytable.var = 12 print(mytable.var) mytable.var = function(self) return 12 end print(mytable:var()) выдадут одинаково 12
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
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
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
мне нужно поделить массив на несколько массивов и раскидать их по тредам
Мерль
мне нужно поделить массив на несколько массивов и раскидать их по тредам
Готовой функции для этого нет, как нет и тредов в lua (
Dmitry
lanes?
Мерль
И на размерностях таблиц в миллионы строк ты заколдобишься
Dmitry
я знаю что в языке нет, я и спрашиваю либу на си для луа, в которой реализована работа с массивами
Мерль
lanes?
Ну, разве так
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-ку. Это довольно просто, правда, тут проблемы с либами, с которыми компилить.
Мерль
так я хотел на си возложить
Вообще, если у тебя не torch и немного ещё написано кода, то возьми лучше питон и numpy + numba
Dmitry
а на лау есть?
Yogurt
Неа
Dmitry
а это https://github.com/LuaLanes/lanes
Yogurt
Это питоновское
Dmitry
упс
Мерль
а на лау есть?
Вместо numba - luajit Вместо остального есть недоразвитые реализации
Snusmumriken
Есть ещё SDL, предоставляющий любой обёртке вокруг него натуральные тяжёлые трэды.
Мерль
Круче питона для чиселок и даты имхо только математика, но она тяжелая и дорогая, зараза
Yogurt
Смотря какая цель Если быстро, то питон вообще не про это
Snusmumriken
Хе-хе
Мерль
Смотря какая цель Если быстро, то питон вообще не про это
Когда дело касается чиселок, то питон - это очень удобная обертка над сишечкой Так что пишем прототип на жупайтере, а потом если надо (что редко) фигачим на eigen Но так как чиселки нужно обычно дробить один раз, то питон - очень ок
Yogurt
Что-то как-то жутко
Yogurt
И кажется медленно
Мерль
Кажется Да и обычно скорость там менее важна удобства