Snusmumriken
Правда, ты там боролся за компактность, поэтому пользуйся методикой из перепостенного. Ах да, таблицы это ссылки. Функции тоже, так что там просто присвоение в конечной сборке M ссылок на нужные таблицы с функциями.
Egor
и..пока не проверял насчет ограничений
Egor
а..пофигу, как столкнусь в реальности с ограничениями, буду думать
Egor
Получается что-то типа: local signedAngleBetween = {} function signedAngleBetween.getAngle(vectr1, vectr2, planeNormal) local normvectr1 = self.vectr1:normalize() local normvectr2 = self.vectr2:normalize() local angle = math.acos(normvectr1:dot(normvectr2)) local crossProduct = self.vectr1:cross(self.vectr2) if crossProduct:dot(self.planeNormal) < 0 then return -angle else return angle end end local autoPilotLibrary = {} autoPilotLibrary.signedAngleBetween = signedAngleBetween return autoPilotLibrary ?
Snusmumriken
Ну типа того. Правда вызывать ты будешь local autoPilotLibrary = require"autopilotlibrary" local angle = autoPilotLibrary.signedAngleBetween.getAngle(vec1, vec2, norm)
Snusmumriken
Мне страшно от длины модулей и методов.
Egor
Предлагаешь сократить название или другой способ есть?
Egor
Хмм, а если что0-то типа такого: local autoPilotLibrary = {} autoPilotLibrary.signedAngleBetween = signedAngleBetween.getAngle(vectr1, vectr2, planeNormal) return autoPilotLibrary
Snusmumriken
Ну частично можно сократить и закешировать. local aplib = require"autopilotlibrary" local getAngleBetween = aplib.signedAngleBetween.getAngle local angle = getAngleBetween(vec1, vec2, norm) Функции это ссылки. Создаём ещё одну ссылку на ту же функцию с произвольным именем и используем.
Snusmumriken
Убери его, тогда будет ок.
Egor
Кстати, что это тут у тебя за self? Откуда оно? К чему относится?
аа, спасибо, я пытаюсь отрефакторить код и самый лучший это переписать с частичным копированием
Egor
вот и скопировал
Egor
local mvar = {} function mvar.mfn(tt) print(tt) end local asd = {} asd.mvar = mvar.mfn return asd ----------- local myfn = require('.test.fun1') myfn.mvar(11) так работает хммм
Snusmumriken
Ну и имена тоже странные. vectr1 — что это за вектор такой? Плюс "распространённое" обозначение векторов — vec1/vec2, tr — типа лишнее )) Хотя тут уже начинается интересное, потому что именно как vec2/vec3/vec4 обозначают векторы определённой размерности, как и с матрицами mat4, например. Поэтому давай vecA/vecB, самому потом будет понятнее.
Egor
оно глобальное игровое
Egor
как и vec3
Snusmumriken
Да я уже понял что это функции создания векторов.
Snusmumriken
Ну тады vecA и vecB, ибо цифры у них принято под размерность точить, я уже описал.
Egor
так и сделал
Snusmumriken
Экспериментируй, в общем, и старайся сокращать, сохраняя понятность. А то оче много текста, и писать неудобно и читать потом.
Snusmumriken
Во, какие ещё функции ты собрался запихивать в signedAngleBetween? Ну там есть getAngle, а что ещё там может быть?
Snusmumriken
А зачем тогда таблица signedAngleBetween?
Egor
есть куча мелкий функций
Egor
типа рассчета времени разгона/остановки и тд. решил запизать в одну
Egor
А зачем тогда таблица signedAngleBetween?
ну да, можно было бы в одну функцию.
Snusmumriken
типа рассчета времени разгона/остановки и тд. решил запизать в одну
local aplib = {} function aplib.getSignedAngleBetween(...) ... end return aplib Зачем тебе лишняя таблица, когда можно без неё?
Egor
кажется так красивее)
Snusmumriken
Это ненужное усложнение )) Плюс так даже с длинными именами получается короче.
Egor
ахах) угу
Snusmumriken
Вот если у тебя несколько библиотек объединяются в одной по категориям, как я показывал с graphics и music — это понятно зачем, оно так легко разделяется плюс можно закешировать. Допустим, ты в этом месте работаешь только с графикой, и такой: local gr = module.graphics gr.draw(something) gr.draw(something_else) gr.print(some_text)
Snusmumriken
Категории должны быть обоснованы, иначе это лишние сущности, которые самое время обрезать большой опасной бритвой.
Snusmumriken
Лучше сделать только то что необходимо, и не больше ))
Snusmumriken
Хотя если у тебя там ещё будет getUnsignedAngle, то можно выделить подкатегорию angle, а в неё запихнуть getSigned/getUnsigned и ещё чего-нибудь. Если чего-нибудь не будет — то не нужно ради двух функций мутить целую таблицу.
Egor
unsigned - есть готовая функция встроенная
Snusmumriken
Тады запихни и её сюда ))
Snusmumriken
Пущай будут рядышком.
Egor
да у меня просто разрыв мозга немного. автопилот есть для планеты и космоса. и это будет два разнх кода т.е. для космолета и самолета. А также..может быть такое, что они будут объединены(в большинстве случаем) т.е. корабль летает и в космосе и на планете. Вот и думаю, может все в одном файле сделать?
Egor
но опять же чисто космическому нафиг не нужен автопилот для планеты и наоборот
Egor
а хотя... планетарный автопилот можно юзать для облета любых других объектов
Egor
@Snusmumriken ничего что флужу или запрещено?
Snusmumriken
Переключение между космосом и планетой в зависимости от того, какой режим сейчас активен. Ну и набор связок между.
Snusmumriken
Допустим, долететь до ближайшей точки до тебя на планете, и уже потом ориентироваться на ней.
Snusmumriken
Это даёт некоторые погрешности в плане оптимальности, но проще.
Egor
хотя что космический или планетарный почти ничем не отличаются, только одной функцией
Egor
на всякий случай вынесу код общий (мини функции) вдруг что на будущее понадобится
Snusmumriken
Потом
Egor
То чувство, что не знаешь куда засунуть функцию, так как она юзается и как чать либы и как самостоятельная фукнция -_-
Egor
Как правильнее сделать: local myval = {} -- оно меняется всегда при каждом тике myval.data = long_long_value_from_game function myval.fun() -- проблема в том, что эта переменная как я понял кэшируется -- можно ли сделать чтобы оно не кэшировалась, а вынес наружу, так как переменная юзается несколько раз. myval.data end
Snusmumriken
Ммм. Как ты получаешь long_long_value_from_game, если оно постоянно меняется?
Egor
Ммм. Как ты получаешь long_long_value_from_game, если оно постоянно меняется?
ну не валуе..а глобальная переменная, но она длинная.
Egor
стало лень и просто их продублировал везде
Nikola
что я делаю не так? if words[wold] == nil then words[words] = true return word end
Nikola
Опечатка во второй строчке?...
таки да, премного благодарен. интересное наблюдение: при гуглении обратной таблицы, что бы почитать юзкейс, поисковик ничего толком не дал
Nikola
хух, таки нашел данный термин. начал уже на шизу думать)
Highly Likely
Всё равно ничего не понял, но ладно
🐅🤦‍♂️
Есть репозиторий love2d проекта под управлением git. Решил попробовать накачать сторонних библиотек сабмодулями. Сделал git submodule init. Потом качаю так git submodule add https://github.com/YoungNeer/lovelib.git Скачивается. В main.lua пишу love.colors = require "lovelib/lovecc/lovecc", но при запуске получаю ошибку, что lovecc.lua не может найти модуль colorcodes. Этот модуль лежит на одном уровне с файлом lovecc.lua. В lovecc.lua первая строка local colors=require 'colorcodes'. Как-то можно добавить пути поиска модулей, что-бы подключались файлы из lovelib/lovecc/lovecc без изменения кода скачанной библиотеки?
🐅🤦‍♂️
Пошел читать "Package Path"
Anonymous
Друзья, кто проводил сравнение JS и Lua в плане скорости? Можете сказать кто где выигрывает?
vvzvlad
ТВОЙ НИК НА МЕНЯ ОРЕТ
Anonymous
извини, попрошу его потише быть
Snusmumriken
Друзья, кто проводил сравнение JS и Lua в плане скорости? Можете сказать кто где выигрывает?
У жаваскрипта есть популярная компилирующая виртуальная машина v8, которую используют во всяких браузерах и нодах. У луа есть две основные виртуальные машины: PUC Lua (дефолтная) и luajit — компилирующая. PUC Lua — довольно быстрая фиговина для не-компилирующих скриптов, обгоняет всякие дефолтные питоны и жаваскрипты. Luajit — где-то обгоняет v8, где-то не совсем: лучше всего luajit справляется с циклами с минимумом условий и математикой, на этом он обгоняет всех подряд. И на вызове внешних функций, они там быстрее чем в C.
vvzvlad
jit на больших циклах победит
Snusmumriken
Когда как.
Snusmumriken
Вот на вот этой задаче — вот так вот. https://habr.com/ru/post/113804/
Anonymous
видел статью, но мне показалось не совсем корректное сравнение
Anonymous
а, нет, это другая статья
Anonymous
прошу прощения
Snusmumriken
а в % соотношении насколько быстрее luajit, допустим, на больших циклах?
Более-менее нормальное. С учётом не очень оптимизированного кода и на жаваскриптовой, и на луажытной стороне. Я надеюсь, ты понимаешь что синтетические тесты — это полная фигня? Всегда есть совершенно конкретная таска, которую что-то выполняет быстрее а что-то медленнее. В среднем, луажыт быстрее на циклах (когда трассы успевают разогреться).
Anton
а в % соотношении насколько быстрее luajit, допустим, на больших циклах?
Увы, на этот вопрос нельзся дать однозначный ответ. Очень зависит от полезной нагрузки "большого цикла".