Ruslan
нигде
Я хотел это процитировать (где про порог говорил)
🌗
Ruslan
🌗
а, ну хотя если речь о референсном луа, то там документация наверное полезна
Ruslan
Благодарю за ответы!
🌗
🌗
листеры что видел в публичном доступе научились ломать, как и декомпиляторы
🌗
Lucky
На луях https://www.reddit.com/r/INSTEADEngine/comments/yelkob/welcome_to_rain/
Dmitry
Есть только два типа людей.
mva
Lucky
Eduard
Подскажите, есть ли в луа возможность написать функцию, которая принимает произвольное кол-во аргументов?
Например, в питоне это можно сделать через *args в параметрах функции, в джсе через рест параметры ...params.
Но как сделать то же самое в луа?
🌗
function foo(...)
local args = {...}
—code
end
🌗
все аргументы будут в таблице args
Eduard
спасибо
Александр
А ещё так:
function f(tbl)
for i, v in ipairs(tbl) print(v) end
end
f{"1", 2, 3}
Snusmumriken
У конструкции {...} есть проблемы с nil-значениями, а ещё они создают лишнюю таблицу. Для этого есть функция select, которая превосходна.
Snusmumriken
Ну там:
function concat(separator, ...)
local result = {}
for i = 1, select("#", ...) do
local item = select(i, ...)
result[i] = tostring(item)
end
return table.concat(result, separator)
end
function summ(...)
local result = 0
for i = 1, select("#", ...) do
result = result + select(i, ...)
end
return result
end
И select в принципе быстрее работает чем операции с табличками. Но она возвращает сразу все элементы начиная с i, поэтому пропихивать её результат сразу в функции не всегда гуд.
mva
@HighlyLikelyUser не честно! я на секунду задержался прочитать (вдруг всё-таки не спам) уже протыкав галки, а ты опередил :)
Highly Likely
Alexandra
Всем привет! Вакансия для чистых луашников)
Компания Bercut Ltd. – более 27 лет создаем и внедряем бизнес-продукты и кастомизированные решения для операторов связи по всему миру.
Офис в Санкт-Петербурге, возможность удаленной работы из любого уголка нашей необъятной, аккредитованная компания со всеми актуальными в нынешнее время профитами, оклад от 150-200K руб. net плюс ежеквартальные премии (50% от оклада).
Сейчас мы в поисках Software developer (Lua) (более подробно https://spb.hh.ru/vacancy/71215158)
Задача совместно с командой R&D сделать ключевой продукт компании (биллинг) максимально современным, быстрым и надежным.
Основное:
🔹разработка высоконагруженных сервисов распределенной биллинговой системы (объектные модели и скрипты на Lua)
🔹Tarantool
🔹проектирование интерфейсов SOAP/REST
Писать в личку @Ant_Alexandra - расскажу подробно и честно про команду, задачи, ожидания и перспективы)
Пост согласован с @HighlyLikelyUser с большим пиететом к луа-разработчикам😉
mva
тарантул для билинга? интересные нынче биллинги пошли :)
Mike_Went
Tverd
Yaroslav
У меня база с профилями абонентов в тарантуле, логика на луа
Snusmumriken
У меня на работке биллинг на луях же, вместе с остальной бизнес-логикой, правда без тарантула )
Илья
Почему бы собственно и нет
Snusmumriken
Я совершенно внезапно вспомнил косячок скриптиков (и любых яп, не имеющих класса "валюта", учитывающего нижеуказанные факторы) в биллинге. Точнее даже не в биллинге, а при дёргании множества крошечных операций, типа "применяем цепочку модификаций +5% -5% +5%" или "итеративно преобразуем валюты" или "суммируем новые цены после преобразований вместо первоначального суммирования" — от гуляний мантиссы может внезапно выясниться, что конечная циферка после преобразований на несколько центов выше или ниже требуемого, а при умножениях (оптовые закупки/продажи) это суммарно может вылиться в гуляющие туда-сюда тысячи баксов.
Но это в целом относится только к "серьёзному" биллингу вроде переусложнённых торговых площадок или брокерского по.
Подобные ошибки, кстати, часто маскируют той или иной "комиссией" при платеже — человек видит, мол "с вас комиссия", но не подсчитывает её полностью.
И у тарантула по моему есть нормальные тулзы для работы с валютами.
Anton
Это проблема не языков/бд, а исключительно хренового проектирования.
Когда на этапе разработки архитектуры закладывают единственную валюту, точность два знака - а потом начинают прикручивать сбоку другие через костыли - вот тогда мантисса начинает плавать.
Snusmumriken
Ну в общем и целом да, конечно.
Просто если пользоваться длинной арифметикой а то и вовсе настоящими дробями — проблемы как бы и нет, и можно накручивать что угодно )
Snusmumriken
Надо будет в качестве развлечения накатать на луях класс работы с выражениями, мол, число, с которым проводим тонну операций, сохраняем все операции в выражение и выдаём результат по необходимости. С подстановкой других выражений, офк.
fgntfg
Это вы еще дебет с кредитом не путали
WDMR
а что если хранить валюту в integer в копейках?
WDMR
мантисы не будет
Денис
Я совершенно внезапно вспомнил косячок скриптиков (и любых яп, не имеющих класса "валюта", учитывающего нижеуказанные факторы) в биллинге. Точнее даже не в биллинге, а при дёргании множества крошечных операций, типа "применяем цепочку модификаций +5% -5% +5%" или "итеративно преобразуем валюты" или "суммируем новые цены после преобразований вместо первоначального суммирования" — от гуляний мантиссы может внезапно выясниться, что конечная циферка после преобразований на несколько центов выше или ниже требуемого, а при умножениях (оптовые закупки/продажи) это суммарно может вылиться в гуляющие туда-сюда тысячи баксов.
Но это в целом относится только к "серьёзному" биллингу вроде переусложнённых торговых площадок или брокерского по.
Подобные ошибки, кстати, часто маскируют той или иной "комиссией" при платеже — человек видит, мол "с вас комиссия", но не подсчитывает её полностью.
И у тарантула по моему есть нормальные тулзы для работы с валютами.
Я подозреваю, что там играет свою роль Float. Я с этим столкнулся, когда учил питон недавно и переписывал одну программку, которую писал на луях. В Луа оказалось, что Number немного поумнее - тут если округлять, то все работает нормально. На питоне же Float врет безбожно. Но там есть decimal, он как раз помогает нормально математику. С ним только у меня и получилось.
Денис
Надо правда еще сказать, что функцию округления в луе я брал с Coderoad, т.е., она не родная.
Snusmumriken
а что если хранить валюту в integer в копейках?
Такой вариант тоже есть в целом, но просто мне нравится затея оформить накопитель матвыражения а ля
x = (n(10) + 20) / 50
y = x + n(y + 20) / 25
print(y:solve())
Примерно такая ерунда. Типа, n(10) начинает накапливать все остальные операции, под конец сокращает всё что сокращаемо и выводит результат, а ля решатель уравнений.
И мол всякие дроби вида 1/3 остаются дробью до конечного вычисления результатов.
Lucky
Lucky
https://iquilezles.org/articles/floatingbar/
Lucky
Иниго тоже об эту тему ум морщил.
Snusmumriken
🌗
прив, не подскажете как понимать такую "фичу" референсного lua?
lua 5.4.4
#{1, 2, 3, nil, 4} -> 5
luajit 2.1.0-beta3
#{1, 2, 3, nil, 4} -> 3
Artem
luajit основана вроде бы на 5.1
🌗
поведение оператора "#" различается между версиями?
🌗
или у референсного lua иное мнение о sequence
Artem
https://habr.com/ru/company/vk/blog/493642/
🌗
получил 3 только на 5.0.5
mva
а вообще там в статье на хабре есть объяснение
mva
начинается в блоке про "длина таблицы table.getn"
mva
> LuaJIT ищет в таблице "границу". Если в массиве есть пропущенные значения, а значит границ существует несколько, то LuaJIT в зависимости от обстоятельств может найти любую из них, и будет прав:
Luсky
Ну, за дырки в таблице надо погромиста бить по шевелюре
Snusmumriken
Snusmumriken
Also there some issues with holes
Snusmumriken
table.len will iterate array until first hole.
# will use binary search.
ipairs iterates until first hole.
pairs does not care about.
Snusmumriken
So t[#t + 1] = n will insert in "almost random hole" or end of array.
t[table.len(t) + 1] = n will insert in first hole.
table.insert uses binary search like #.
Snusmumriken
So it's just little inconsistency between table.len and #, but both have uses.
And # is much faster on straight arrays without holes, so use table.len if you work with hole arrays and need to check first hole.
Snusmumriken
прив, не подскажете как понимать такую "фичу" референсного lua?
lua 5.4.4
#{1, 2, 3, nil, 4} -> 5
luajit 2.1.0-beta3
#{1, 2, 3, nil, 4} -> 3
Почему же в одной версии вернуло 5, а в другой вернуло 3?
Потому что интерпретатор во-первых можно настраивать, например при разметке массива можно взять разный оверхед таблички "на будущее" — и бинарный поиск будет начинаться с другого места. Во-вторых, массивы с дырками, разумеется, недетерминированы )
# это всегда бинарный поиск, вопрос — откуда он начинается.
Bolt
Если система счисления десятичная)
mva
вы продаёте рыбов?
Денис
Ребят, всем дрась!
Я помню как мы вместе смогли до меня донести фабрики итераторов, как они работают и вообще. Искреннее вам спасибо!
Но тут возник вопрос по силе таблиц для GC: когда мы пишем метатаблицу, мы можем определить силу ключей или значений для сборщика. Как это в принципе понять? Как я грубо понимаю работу сборщика: сборщик мусора запускается, проверяет объекты, их взаимосвязь и если какой-то из элементов используется либо по далеким ссылкам, либо непосредственно, в видимых областях, сборщик его не трогает. Если объект болтается без упоминаний, и не используется и не удерживается никем, сборщик его закрывает. А режимы силы как работают? Если стоит сила ключа, то сборщик проверяет нет ли в других местах обращения по ключу к нашей таблице, но не смотрит на значения из нее, а если сила в значениях, то он смотрит на значения таким же образом? Или я что-то неправильно понимаю?
UtoECat
Ребят, всем дрась!
Я помню как мы вместе смогли до меня донести фабрики итераторов, как они работают и вообще. Искреннее вам спасибо!
Но тут возник вопрос по силе таблиц для GC: когда мы пишем метатаблицу, мы можем определить силу ключей или значений для сборщика. Как это в принципе понять? Как я грубо понимаю работу сборщика: сборщик мусора запускается, проверяет объекты, их взаимосвязь и если какой-то из элементов используется либо по далеким ссылкам, либо непосредственно, в видимых областях, сборщик его не трогает. Если объект болтается без упоминаний, и не используется и не удерживается никем, сборщик его закрывает. А режимы силы как работают? Если стоит сила ключа, то сборщик проверяет нет ли в других местах обращения по ключу к нашей таблице, но не смотрит на значения из нее, а если сила в значениях, то он смотрит на значения таким же образом? Или я что-то неправильно понимаю?
UtoECat
Ребят, всем дрась!
Я помню как мы вместе смогли до меня донести фабрики итераторов, как они работают и вообще. Искреннее вам спасибо!
Но тут возник вопрос по силе таблиц для GC: когда мы пишем метатаблицу, мы можем определить силу ключей или значений для сборщика. Как это в принципе понять? Как я грубо понимаю работу сборщика: сборщик мусора запускается, проверяет объекты, их взаимосвязь и если какой-то из элементов используется либо по далеким ссылкам, либо непосредственно, в видимых областях, сборщик его не трогает. Если объект болтается без упоминаний, и не используется и не удерживается никем, сборщик его закрывает. А режимы силы как работают? Если стоит сила ключа, то сборщик проверяет нет ли в других местах обращения по ключу к нашей таблице, но не смотрит на значения из нее, а если сила в значениях, то он смотрит на значения таким же образом? Или я что-то неправильно понимаю?
И режимы таблицы не в силу ключа/значения, а в слабость :)
Totiks
Доброго всем! Подскажите пожалуйста вот в lua на пример есть такое
print [[**************
* * * * * * * *]]
есть ли нечто такое для basic?
fgntfg
Печатать строки в basic? Кажется PRINT
Totiks
print то понятно
Totiks
мне нужно выдать на print сразу отформатированую таблицу, как в примере выше
fgntfg
в каком языке?
fgntfg
в любом случае, надо написать какую-то функцию для рисования каждой строки
fgntfg
или не париться и бахнуть \t как разделители