Aydar
OptimusZero
я вот не поленился и за 3 минуты
http://lua-users.org/wiki/LuaXml
FailsBot
Чот system() барахлит! Не смог получить инфо о батарейке.
Wsevolod
Как писать либу, где используются битовые операции для разных версий луа? В <=5.3 используется _G.bit, в 5.4 — инфиксные операторы
mva
Daniil
Всем привет!
Daniil
Такой вопрос: если я внутри функции создаю локальную функцию, в Луа она каждый раз будет создаваться, или инстанс будет один, а контексты разные?
Igor
Daniil
Igor
Аналогичное поведение будет
Igor
Я просто показал, что каждый раз новая функция создается.
Igor
Да
Igor
В бесконечном цикле получится утечка памяти
Igor
Ну, если мусорщик спит
mva
Daniil
Угу, принял.
Daniil
Поковырял еще.
Всё-таки стоило тут цикл сделать.
Тогда бы мы увидели одни и те же адреса этих функции.
Подсказали почитать статью 6.1 из доки к Lua.
И судя по тому, что там написано, хранится только блок данных для замыкания (локально определенные переменные, например).
А функции все в одном экземпляре.
Igor
Хм, не знал
Alexey
Вообще это еще от версии зависит
https://www.lua.org/manual/5.2/manual.html#8.1
Equality between function values has changed. Now, a function definition may not create a new value; it may reuse some previous value if there is no observable difference to the new function.
Но как эта observable difference определяется - как-то не очень понятно
Alexey
И вроде ujit такое тоже делает, но я не уверен
Александр
Snusmumriken
Daniil
Snusmumriken
Только с 5.2
Daniil
Только с 5.2
Это гуд. Там действительно много классных изменений было.
Snusmumriken
Ну, фигня в том, что за счёт версионности, приходится считать что "данный случай является худшим". Всегда так делаю, готовлюсь к худшему )
Daniil
Ну, фигня в том, что за счёт версионности, приходится считать что "данный случай является худшим". Всегда так делаю, готовлюсь к худшему )
Думаю, тут полезно будет, все же, учитывать специфику проекта.
Если он гуляет по разным платформам, то да.
А если это конкретный движок, который развивается в одном векторе, то уже так перестраховываться смысла меньше.
Сам раньше так делал тоже: типа выработал привычку и норм - пишешь код без кучи детских и непонятных ошибок.
Но несколько проектов спустя обратил внимание, что привычки в таких вещах несколько зашоривают.
И в долгосрочном плане выгоднее пересматривать и вырабатывать новые правила для каждого проекта.
Сохраняет живость ума и побуждает задавать новые вопросы.)
Daniil
Сорян за такую телегу.. Три часа ночи всё же - навевает))
Snusmumriken
В моём случае примерно так: есть некоторый жёсткий набор правил (их немного, где-то 3.5 штуки), и есть специфика проектов, которые мержатся с базовым комплектом с заменой.
Snusmumriken
Но всё что угодно, что может попасть на широкое обозрение, должно быть вылизано, шоб прям кто угодно мог взять и запустить, проверить, сразу использовать и т.д.
Igor
Snusmumriken
Igor
Igor
¯\_(ツ)_/¯
Daniil
Нужны сравнительные тесты, чтобы увидеть, что это не просто стек от вызовов.
Aydar
Alexey
Igor
Ох, использовать функции как ключи для таблицы... Да такого даже мой больной разум ещё ни разу не додумывался😅
Aydar
Daniil
Daniil
Ну изначально вопрос стоял не об использовании уникального указателя, а о том, как писать так, чтобы лишнего не плодить.
Ответ: начиная с 5.2 можно не париться о том как писать и выносить ли локальные функции))
abc
привет! недавно начал изучать lua, подскажите пожалуйста как из этой таблицы вывести возраст и имя студента с наивысшим performance
['Alex'] = { ['age'] = 18, ['perfomance'] = 3, ['course'] = 1 },
['David'] = {['age'] = 24, ['perfomance'] = 2, ['course'] = 5 },
['Ivan'] = { ['age'] = 20, ['perfomance'] = 5, ['course'] = 3 }
сделал так, но в конце выдает первый подошедший age :(
for key, value in pairs(students) do
for key2, value2 in pairs(value) do
if (key2 == 'perfomance') then
perf = value2
elseif(key2 == 'age') then
age = value2
end
end
if (perf >= max) then
max = perf
name = key
end
end
ベクゾッド
привет! недавно начал изучать lua, подскажите пожалуйста как из этой таблицы вывести возраст и имя студента с наивысшим performance
['Alex'] = { ['age'] = 18, ['perfomance'] = 3, ['course'] = 1 },
['David'] = {['age'] = 24, ['perfomance'] = 2, ['course'] = 5 },
['Ivan'] = { ['age'] = 20, ['perfomance'] = 5, ['course'] = 3 }
сделал так, но в конце выдает первый подошедший age :(
for key, value in pairs(students) do
for key2, value2 in pairs(value) do
if (key2 == 'perfomance') then
perf = value2
elseif(key2 == 'age') then
age = value2
end
end
if (perf >= max) then
max = perf
name = key
end
end
Наверное потому что ты сохраняешь только max perf, хотя нужно сохранять вместе с ним maxAge
abc
Vladislav
привет! недавно начал изучать lua, подскажите пожалуйста как из этой таблицы вывести возраст и имя студента с наивысшим performance
['Alex'] = { ['age'] = 18, ['perfomance'] = 3, ['course'] = 1 },
['David'] = {['age'] = 24, ['perfomance'] = 2, ['course'] = 5 },
['Ivan'] = { ['age'] = 20, ['perfomance'] = 5, ['course'] = 3 }
сделал так, но в конце выдает первый подошедший age :(
for key, value in pairs(students) do
for key2, value2 in pairs(value) do
if (key2 == 'perfomance') then
perf = value2
elseif(key2 == 'age') then
age = value2
end
end
if (perf >= max) then
max = perf
name = key
end
end
Ты можешь получать значения из таблицы по ключу, просто по .
local perf = {}
for name, student in pairs(students) do
if not perf.student or perf.student.perfomance < student.perfomance then
perf.student = student
perf.name = name
end
end
return perf.name, perf.student.age
abc
Igor
Ну таблицы и cdata и я использую, это реально полезно
Igor
А вот зачем идентифицировать через функци, тут я применения найти не могу
Alexey
mva
(если функция возвращает разные значения)
mva
впрочем, снус привёл пример не того
mva
использовать результат функции - ничего страшного, в теории.
А вот использовать в качестве ключа определение функции - странновато :)
Igor
Именно
🐅🤦♂️
mva
https://codeberg.org/jouni/mpv_sponsorblock_minimal/src/branch/master/sponsorblock_minimal.lua#L14
mva
да что ж такое-то
mva
что ж они все говнокодеры-то такие
Джифорсович
Из говнокодеров - большинство ленивые зумеры
Джифорсович
Мало кто хочет вникать и постигать дзен, а то еще задротом обзовут (нет, мне правда плевать, как там кто меня обзывает)
Snusmumriken
Джифорсович
Некоторым подружкам даже нравится, что задротишь <your_language_here>, мол не каждый умеет
Snusmumriken
Да не, в любом случае, если тебя обозвали задротом — это может означать в большинстве случаев только твою железную жопу и хорошие мозги в области.
mva