Igor
Давненько про squirrel не слышал
Luсky
Copper cube engine емнип
Александр
http://www.squirrel-lang.org/
Ох, у меня флэшбеки по ней. Луа на стероидах с нулевым коммьюнити
Александр
Ох, у меня флэшбеки по ней. Луа на стероидах с нулевым коммьюнити
Ну так луа на стероидах же, поэтому и сообщество проще. Другая проблема в том, что она замороченнее во многих аспектах, как D по отношению к Си, только в мире Луа
Hello, World! 🎄
Существует ли какой-то способ передать функции все локальные переменные? Допустим у меня есть код: function func2() print(a) end function func1(a) func2() end print(func1()) Выведет nil.
Hello, World! 🎄
Мне нужно как-то func2 передать все локальные переменные которые имеет функция func1
Hello, World! 🎄
Но я не хочу писать так: func2(arg1, arg2, ..., argN)
Hello, World! 🎄
Существует ли какой-то способ передать функции все локальные переменные? Допустим у меня есть код: function func2() print(a) end function func1(a) func2() end print(func1()) Выведет nil.
Хотя я щас думаю может просто использовать локальную таблицу, чтоб функция принимала эту таблицу, а потом её возвращала. Но может есть проще способ просто передать все локальные переменные.
Hello, World! 🎄
Существует ли какой-то способ передать функции все локальные переменные? Допустим у меня есть код: function func2() print(a) end function func1(a) func2() end print(func1()) Выведет nil.
Решил таким способом, в начале функции: local t = var.t local i = var.i local x_pos = var.x_pos local y_pos = var.y_pos local max_width = var.max_width local max_height = var.max_height В самой функции могут производиться различные операции с переменными, потом их возвращаю: return { t = t, i = i, lib = lib, x_pos = x_pos, y_pos = y_pos, max_width = max_width, max_height = max_height, }
Mikhail
Ну это ж общепринятый способ.
mva
Не совсем
mva
Ты сделал костыльно
Hello, World! 🎄
mva
Ты их сначала как переменные инициализировал, а потом набил ими таблицу в return
mva
Я предлагаю сразу в начале сделать их ключами таблицы
Hello, World! 🎄
Hello, World! 🎄
передаю в функцию
Hello, World! 🎄
функция
mva
Ну, как вариант
Hello, World! 🎄
Если что, это я так делаю для своей gui библиотеки на Love2d.
mva
Кстати, в 99.(9)% случаев if var ~= nil then можно писать как if var then
Hello, World! 🎄
Кстати, в 99.(9)% случаев if var ~= nil then можно писать как if var then
Я знал про этот способ и делал вместо этого: a == true. Про nil не знал, что он автоматически false вернет.
Hello, World! 🎄
лол, ведроидный калькулятор на love 😃
Да, я его в apk также упаковал под android работает
Hello, World! 🎄
Рекурсия?
Александр
?
function func2(a) f1 = function() print(a) end return f1 end func2()() func2(5)()
Hello, World! 🎄
function func2(a) f1 = function() print(a) end return f1 end func2()() func2(5)()
Нет, у меня такого нету. Но я уже решил проблему.
Александр
т.е. если func2 будет порождать func1 тогда вопрос локальных переменных будет решён, если я правильно понял вопрос
Hello, World! 🎄
т.е. если func2 будет порождать func1 тогда вопрос локальных переменных будет решён, если я правильно понял вопрос
У меня там немного не так, но проблему я уже решил через передачу аргументов таблицей
Hello, World! 🎄
Спасибо за помощь
mva
Анна а ты точно не бот?
Aydar
Анна а ты точно не бот?
Похоже на бота, она пиарит канал @frontandweb, хз зачем, в мою группу тоже вступила
mva
я хочу понять, провести ли профилактическую беседу или выгнать
Luсky
выгнать
sabaka_naturalka72
Привет всем
sabaka_naturalka72
Нужен помощник по серверу MTA
Igor
Нужен помощник по серверу MTA
Мало того что метавопрос, так еще и ищешь совсем не там где надо. Люди, занимающиеся МТА ищутся в тематических МТА чатах. В общем Lua чате от силы 2-3 человека найдутся которые этим активно занимаются. Если в программе <A> используется язык <B>, то это не значит, что каждый второй в чате по языку <B> работают с программой <A>.
Igor
Нормальный вопрос на самом деле, в данном случае как раз не имеет смысла расписывать подробности (потому что область узкая) но спросить все равно стоит вдруг эти пару человек прочитают. а больше и не нужно
Конкретика как раз всё равно нужна. Пусть область и узкая, но задач можно придумать дохрена)) Начиная какого-нибудь затхлого фрирума, заканчивая рп сервером с кучей наворотов.
Aydar
Конкретика как раз всё равно нужна. Пусть область и узкая, но задач можно придумать дохрена)) Начиная какого-нибудь затхлого фрирума, заканчивая рп сервером с кучей наворотов.
Если бы у него была конкретная проблема он бы ее описал, а раз ее нет то это типа вакансия "реализуй мне то и это за N баксов"
Igor
Если бы у него была конкретная проблема он бы ее описал, а раз ее нет то это типа вакансия "реализуй мне то и это за N баксов"
Ну так а что реализовать нужно же описать всё равно. Зачем заставлять людей задавать лишний вопрос?
Igor
На hh же к примеру ты не откликнешься на вакансию, где написано "зарплата какая-нибудь прикольная (наверное), стек какой-нибудь классный (но это не точно), работаем с вот этим приколом"
Aydar
Нужен помощник по серверу MTA
"Сабака" какой примерно объем работ и величина зарплаты?
mva
Заклевали, он походу с горя в окно вышел :) Ну или мега ТЗ пишет
не, он просто бот и не ответил на капчевопрос @shieldy_bot
Денис
Господа, доброго дня! Читая один парсер INI, наткнулся на такую метатаблицу: -- Store our metadata in the __inifile field in the metatable return setmetatable(t, { __inifile = { comments = comments, sectionorder = sectionorder, } Я так понимаю, это чисто для хранения кастомных значений для записи? Никакого практического применения такая метатаблица не имеет? Там дальше, при сохранении есть такое: -- Get our metadata if it exists local metadata = getmetatable(t) То есть, это чисто для этого весь огород?
Snusmumriken
Практического применения не имеет, весь огород чисто для этого.
Денис
Практического применения не имеет, весь огород чисто для этого.
Ну я был почти уверен в этом. Просто решил уточнить, мало ли, может я чего-то не знаю)))
Денис
Хотя я вообще думал, что в метатаблицу запихнуть что-то, кроме предопределенных полей, нельзя.
Snusmumriken
Гипотетически, можно делать свежие метаметоды, например local oldipairs = ipairs function ipairs(tbl) local meta = getmetatable(tbl) if meta and meta.__ipairs then return meta.__ipairs(tbl) else return oldipairs(tbl) end end
Snusmumriken
И таким макаром переопределить кучу стандартных функций, чтобы начали принимать ещё и таблички, и смотрели в их метаметоды.
Snusmumriken
io.write(myimage) который смотрит в метатабличку таблицы-картинки и получает её строковое представление.
Денис
Все, понял.
Snusmumriken
Но порой проще и нагляднее просто сделать метод io.write(myimage:toFile()), поэтому это редко используется.
mva
я вот тут задумался... Вожусь с tdlua в режиме иммитации tdbot (т.е. всё, что доступно - функция-коллбек, которая дёргается условным бесконечным циклом когда случается какое-то событие из телеги). Хочется сделать таймеры для некоторых задач, но в пределах той же функции они работают хреново, ибо частота её вызова никак не гарантируется, так что таймер "раз в две секунды" может выполниться и через минуту после предыдущего вызова, а то и через день, если сообщениф не приходило. Поэтому захотелось какие-нибудь внешние таймеры. Посмотрел я в сторону luv, но он хочет свой луп запустить. Ну и таймеры у него отчего-то блокирующие (т.е. если в один из таймеров сунуть луп, то он заблокирует остальные таймеры). А два лупа параллельно луна не умеет (и не уверен что тут даже корутины помогут, т.к. из цикла бота всё равно yield'нуться можно будет только когда сообщение придёт, т.е. возвращаемся опять к изначальной проблеме... Уже мысленно дошёл до идеи cqueues, но что-то совсем уже перебор по сложности получается чота :-/
Александр
я вот тут задумался... Вожусь с tdlua в режиме иммитации tdbot (т.е. всё, что доступно - функция-коллбек, которая дёргается условным бесконечным циклом когда случается какое-то событие из телеги). Хочется сделать таймеры для некоторых задач, но в пределах той же функции они работают хреново, ибо частота её вызова никак не гарантируется, так что таймер "раз в две секунды" может выполниться и через минуту после предыдущего вызова, а то и через день, если сообщениф не приходило. Поэтому захотелось какие-нибудь внешние таймеры. Посмотрел я в сторону luv, но он хочет свой луп запустить. Ну и таймеры у него отчего-то блокирующие (т.е. если в один из таймеров сунуть луп, то он заблокирует остальные таймеры). А два лупа параллельно луна не умеет (и не уверен что тут даже корутины помогут, т.к. из цикла бота всё равно yield'нуться можно будет только когда сообщение придёт, т.е. возвращаемся опять к изначальной проблеме... Уже мысленно дошёл до идеи cqueues, но что-то совсем уже перебор по сложности получается чота :-/
lalarm ? и ещё можно поуниверсальнее найти библиотеки, но это первое что на ум пришло
mva
lalarm ? и ещё можно поуниверсальнее найти библиотеки, но это первое что на ум пришло
да я бы уж лучше что-нибудь на лучжитовом FFI взял, если честно, чем C-модуль опакечивать :)
mva
Почему?)
переносимее (luajit меня итак везде, а вот библиотеку с последним коммитом порядка 15 лет назад опакечивать - сомнительное удовольствие) :) // ну и такими темпами можно и cqueues взять 🤷‍♂️
Вилби
Сморя для чего опять же
Александр
переносимее (luajit меня итак везде, а вот библиотеку с последним коммитом порядка 15 лет назад опакечивать - сомнительное удовольствие) :) // ну и такими темпами можно и cqueues взять 🤷‍♂️
luarocks ? Да и зачем опакечивать ? Там gcc -shared lalarm.c -o lalarm.so -llua и готово, дальше просто используешь. Другой вопрос в том, что возможно есть более переносимые решения и переносимые решения под тот же luajit, что было бы лучше. В остальном - вы можете просто библиотеку потоков интегрировать и в побочном потоке сидеть в ожидании или даже спать. Плюс вообще как крайний вариант можно вообще сидеть в активном ожидании и смотреть на часы.
Inellok
Что быстрее: luajit или nodejs?
Inellok
не очень понял
Inellok
у жита скорость си?
Luсky
На хабре поищи js vs lua и js vs luajit
Timur
Что быстрее: luajit или nodejs?
На холодном старте и маленьких скриптах - однозначно луаджит. На теплом старте со стадией прогрева скорость сравнивается. Но памяти (даже на пустой) изолят в ноде тратишь раз в 20 больше