Snusmumriken
Пока не сравнивал, как оно будет по производительности, но такое использование метаблиц прям удивило
Пример фибоначчи из википедии с мемоизацией. fibs = { 1, 1 } -- Первоначальные значения для fibs[1] и fibs[2]. setmetatable(fibs, { __index = function(name, n) -- Вызов функции, если fibs[n] не существует. name[n] = name[n - 1] + name[n - 2] -- Расчёт и мемоизация fibs[n]. return name[n] end })
Snusmumriken
Я тут на codewars решал задачки на Lua и попалась такая задачка Write a function that when given a number >= 0, returns an Array of ascending length subarrays. (Напишите функцию, которая при задании числа >= 0 возвращает массив подмассивов возрастающей длины.) pyramid(0) => [ ] pyramid(1) => [ [1] ] pyramid(2) => [ [1], [1, 1] ] pyramid(3) => [ [1], [1, 1], [1, 1, 1] ] Решил задачку простым решением в лоб, после открылись решения других участников и одно из решений прям выделяется среди остальных: return function(n) return setmetatable({}, {__index = function() return setmetatable({},{__index = function() return 1 end}) end}) end
Но к сожалению, решение генерации таблички не позволяет производить обход результирующей таблички. Ещё N не используется, конечная метатабличка как бы бесконечная. Ещё оно будет работать со строковыми ключами. И ещё куча "но". Так что результат в целом не соответствует задаче, и подходит только под случай когда пользователь пытается получить результирующий ключ напрямую а ля v = t[2][3] )
Gaisin
да, автотесты вроде проверяют только конечный результат
Alxius
тут случайно заглянул на Unigine blog, i они пишут о генерации целых текстур реалистичных на основе шейдеров и что можно новые делать используя целый редактор. https://habr.com/ru/company/unigine/blog/679134/ я в этом не слишком разбираюсь я все таки по 2д куда больше, но показанные видео впечатлили.
B
Мне вот лично с униженом ничего не понятно, они дали людям немного свободы и возможность немного поиграть с движком но он же у них всецело коммерциализирован, по уровню свободы до анриала далеко
Luсky
Медленный, собака.
Dmitriy
Всем привет! Может кто-нибудь помочь с реализацией вот такого задания? На языке программирования LUA: Реализуйте кэш (в кэше должно быть 10 произвольных записей), содержащий в себе объекты следующего класса: Id - идентификатор сущности (всегда числовой), name - имя сущности, descr - примечание, amount - цифровое поле, fn – поле содержащее функцию, которая выводит на экран всю информацию (значения всех известных полей) о переданной записи по ее идентификатору. Затем необходимо: 1.Вывести на экран все значения из кэша (использовать для этого созданную ранее функцию), идентификатор которых является четным, а также вывести общее кол-во записей в кэше с указанием сколько из них являются четными. 2.Вывести на экран самое минимальное, максимальное и среднее арифметическое значение поля amount, для всех записей в кэше. 3.Вывести на экран значения name и amount из кэша для последней записи в кэше. 4.Добавить в кэш новое значение и вывести его на экран. 5.Добавить в кэш новую запись с дополнительным полем newField = ‘NewValue’ и вывести на экран значение всех полей добавленной записи.
Alexander
паодкиньте пожалуйста формулу преобразавания милесекунд в секунды. Например 5455 милесекунд привести к формату 5:455
Alexander
Так умножить на 0.001, не?
а точечки?) Хотя это тоже надо. Спасибо)
Денис
Попробуй math.modf
Если нужно округлить до целой, где-то валялась самописная функция с Coderoad для округления
Денис
а точечки?) Хотя это тоже надо. Спасибо)
Вот здесь есть https://github.com/outsidepro-arts/Properties_Ribbon/blob/main/engine/utils.lua
Александр
правильно человек про модф сказал
Вообще с 5.3 в луа числа смешанные, в виду чего можно просто вывести string.format(%d:%03d, msec / 1000, msec % 1000)
Александр
modf и округления это про < 5.3
Arsen
Всем привет
Arsen
пацаны прям срочно нужна помощь
Arsen
Есть объект, через который может проходить чел, если у него нвбулка true, всё вроде работает, но через некоторое время отключаются на всех объектах коллизия и всё падает под карту
Arsen
** hook.Add( "ShouldCollide", "hospital_epta", function( ent1, ent2 ) if not IsValid(ent1) then return true end if not IsValid(ent2) then return true end if not ( ent1:GetClass() == 'money_printer' and ent2:GetNWBool( "hospital_death", false) == false) then return true else return false end end ) **
Arsen
Александр помогите
retrocat
бан, реклама
Snusmumriken
И да, давай более подробную инфу. Что за двигло? Что за хуки? Где как и так далее.
Arsen
gLua
Александр
Т.е. я бы рекомендовал поотлаживать и проследить причину отключения столкновений, ибо то, что всё падает под карту из-за выключения физики столкновений. Плюс пара запросов в поисковике не выдали мне GetNWBool( "hospital_death", false) ситуаций, когда в данной функции есть второй параметр. Т.е. вполне логично, что в SetNWBool() два параметра, но откуда они в Get я не совсем понимаю.
Arsen
Я данный код с сборки взял
Arsen
Мне нужент код чтоб текстуры не падали а я не могу найти
Arsen
(
Александр
Плюс я прямо скажу не в теме gMod'а, поэтому особо не подскажу. Единственное что меня смущает, что позитивное true возвращается на ситуациях, когда сущности не допустимы, другими словами я не совсем понимаю, для чего нужна данная функция возврата. Самое простое - найдите документацию по крюкам, посмотрите за что отвечает значение функции.
Arsen
понял
Arsen
спасибо
Александр
А лучше поискать тематический форум по этой теме, там скорее всего аудитория и живее и больше в теме разбирается, ибо это больше не луа, а спецефичная для среды вещь.
Arsen
hook.Add( "ShouldCollide", "CustomCollisions", function( ent1, ent2 ) -- If players are about to collide with each other, then they won't collide. if ( ent1:IsPlayer() and ent2:IsPlayer() ) then return false end end )
Arsen
вот такое есть
Arsen
я нашел
Arsen
а ссылку скидывать можно тут ?
Александр
Arsen
)
Александр
А у вас столкновение должно быть или нет ? Т.е. вы отлавливаете момент столкновения для чего ? Для того чтобы его остановить ?
Arsen
Есть объект, через который может проходить плеер
Arsen
через некоторое время отключаются на всех объектах коллизия и всё падает под карту
Александр
Есть объект, через который может проходить плеер
А GetNWBool для чего ? Это какой-то флажок из сессии сетевой игры ?
Aqendo
Может стек переполняется или что-то такое?
Александр
Честно говоря я не знаю, тут либо к тем кто в теме вопросы задавать, либо отлаживать
kirill
Всех приветствую. Вопрос к тем, кто использовал совместно Lua и Rust. Пытаюсь на rust написать модуль для Lua. Пишу на винде, использоваться модуль тоже будет на винде, поэтому решение именно под эту ось ищу. Пробовал использовать просто lua под раст, но под виндой он не собрался. потом посоветовали mlua, который с помощью msys2 удалось собрать и даже написать на нём модуль. Но модуль получился под Lua5.1 вместо необходимого мне 5.3. Я попытался найти решение, но так и не понял как в mlua указать, для какой версии нужно собирать. Если кто-то поможет, буду благодарен.
Snusmumriken
Ой какая специфичная фигня
Inellok
Хз. На цпп пишут же, почему бы на раст не (пере)писать
Igor
Среди них имеется lua53, по дефолту он выключен
Igor
Ща, найду
Igor
https://docs.rs/crate/mlua/latest/features#lua53
Igor
Во
Igor
Флаги при сборке указываются, если что.
Igor
Если мне память не изменяет, что-то типа такого: cargo build --features "lua53"
🐅🤦‍♂️
Или нужные фичи указать в Cargo.toml проекта, в секции библиотек.
Igor
А, ну кстати да
Денис
Ой какая специфичная фигня
Да пусть хоть на чистом ассемблере пишут, главное - чтобы писали! 😃
usernameak
как я могу получить какую-то ссылку на луашный объект, чтобы потом использовать её в сишном коде?
usernameak
при этом чтобы GC этот объект не освобождал пока эта ссылка существует
usernameak
хм. luaL_ref это то что мне нужно?
Snusmumriken
Получаешь ссылку, а потом такой вытягиваешь в стек по ссылке из REGISTRYINDEX. Если больше не нужно — unref.
Roman
Доброго дня! Подскажите курсs по lua, на русском желательно, условно бесплатный, может кто посоветовать.
Snusmumriken
Доброго дня! Подскажите курсs по lua, на русском желательно, условно бесплатный, может кто посоветовать.
Есть курс для четвероклассников от уважаемого @Bratus: https://www.youtube.com/watch?v=QjslCOj9nIA&list=PLNdb9-93_ov4-WcZxzjdFNiZJm4QU4IBM
Snusmumriken
Доброго дня! Подскажите курсs по lua, на русском желательно, условно бесплатный, может кто посоветовать.
Тебе какой курс по сложности? Для совсем новичков или уже для (смешариков) худо-бедно умеющих программировать на чём-то ещё?
Snusmumriken
Ну и второй очевидный вопрос — для каких целей?
Roman
Тебе какой курс по сложности? Для совсем новичков или уже для (смешариков) худо-бедно умеющих программировать на чём-то ещё?
СПС, по первому образованию прогал, нравился низкоуровневые языки. ООП - не зашло. Питончик до классов прошел, более менее понятно. В общем, на Lua - этого под мои задачи будет достаточно. Столкнулся с такой проблемой, есть str= " DDDDFFFFSSSSS" не могу взять срез ( по Питонски str[5:10] или просто обратиться к индексу (s[3]) Не понимаю, это сложность языка какая-то или это совсем низкоуровневый язык?
Snusmumriken
Тут нет индексации по числам. Для её реализации — получаешь кусочек строки: str = "DDDDFFFFSSSSSSS" третий_символ = string.sub(str, 3, 3) кусок_строки_с_3_по_5_символы = string.sub(str, 3, 5) К строкам можно применять ООПшные фишки, вроде третий_символ = str:sub(3, 3), вызывать функции как методы. В луа методы вызываются через двоеточие, это такой синтаксический сахар.
Snusmumriken
И через хитрую жопу можно добавить числовые индексы, вроде: debug.getmetatable("").__index = function(self, key) if type(key) == "number" then return self:sub(key, key) end return string[key] end str = "Hello!" print( str[2] ) --> e
Snusmumriken
Лучше к этому не привыкать. Это изменение стандартного поведения строк, что не очень хорошо для консистентности.