usernameak
о боже. а погуглить?
ты как в луёвом чате оказался, майк
usernameak
а ты?
ну я по луям искал кое чё
notepad++
usernameak
нашёл?
...да?
Mike_Went
...да?
пизда :D
usernameak
..."теперь выходи"?
Snusmumriken
кота
Тебе встроить, чтоб плагины клепали?
usernameak
да
Snusmumriken
да
Кстати, в чём реальная проблема дебилов? Можно же выдавать плагинам отдельный стейт, и проверять правильность вызова апишки на сишной стороне. Луа в целом дебилорезистентная жеж. Просто даже статика не защитит от откровенного дебилизма.
Snusmumriken
Откровенным дебилам скорее даже гуй выдавать, или кастомный "типа"-скрипт на in-out-переменных. Или выдавать набор колбеков. Или выдать поле для кода на манер: $in_var_foo $in_var_bar $out_var_baz = $in_var_foo + $in_var_bar, при исполнении — пройтись препроцессором с заменой, и например лоадстрингнуть. Чтобы контролировать даже вызовы всего пользовательского.
Leon174
Ilya
Да
А прикольная книжка, кстати 😂
Anonymous
А как создать неймспейс, а не класс через сол? При создании таблицы, я могу обращаться через точку, но видел более удобный способ через : как это реализовать?
Anonymous
: — это не неймспейс mytable:foo(123) эквивалентно mytable.foo(mytable, 123)
Получается можно использовать и так, и так, при создании тейбла с одинаковыми параметрами?
Wsevolod
Получается можно использовать и так, и так, при создании тейбла с одинаковыми параметрами?
Да, в случае mytable:foo(123), кл. слово self внутри функи foo будет == mytable local t = {} function t:foo(args) return t == self end print(t:foo(123)) -- true print(t.foo(t, 123)) -- true
Dmitrii
Всем привет. А кто-нибудь знает, можно ли передавать в Луа из c++ коннекшен к базе данных? Другими словами юзать общий коннекшен к sqlite и в c++ коде и в луа скрипте
Dmitrii
Погуглил, не нашел такого сходу
Wsevolod
А можно как-то собрать C-модуль, чтобы стектрейс луа вместо ? показывал сишку?
Snusmumriken
Всем привет. А кто-нибудь знает, можно ли передавать в Луа из c++ коннекшен к базе данных? Другими словами юзать общий коннекшен к sqlite и в c++ коде и в луа скрипте
Сделай userdata с указателем на соединение. Навесь метатаблицу с плюсовыми методами, шоб из луа работать с ним как с объектом.
Snusmumriken
Ну это уже выглядит оверкиллом.
Александр
Ну это уже выглядит оверкиллом.
Использовать сырой С-API в С++ - плохая практика. Особенно если есть удобные, быстро подключаемые обертки, позволяющие сделать тоже самое за меньшее количество строк и почти не думая
Dmitrii
https://github.com/ThePhD/sol2
ого, и такое есть. Спасибо, тоже гляну
Anonymous
4
Yura
Привет! Подскажите плиз, как переменной присвоить элемент из тэйбла так чтобы в последующих операциях с этой переменной не было воздействий на оригинальный тэйбл)
Александр
Highly Likely
Глубокая копия требуется только для таблиц
Highly Likely
Все остальные типы копируются по значению/ссылкой на литерал строки
Yura
а без копирования всей таблицы никак?
Highly Likely
local t = {} t.int = 1 t.table = {} local intfromtable = t.int — ok local tablefromtable = t.table — reference
Александр
а без копирования всей таблицы никак?
Если я правильно понял, тебе нужно mytbl = { big.. } elem = deepcopy(mytbl.foo) elem.bar = 1 -- mytbl и mytbl.foo не меняются
Highly Likely
Highly Likely
Wsevolod
где lightuserdata?
Highly Likely
где lightuserdata?
Где-то в главе, какая разница?
Wsevolod
Где-то в главе, какая разница?
Такая, что 9 basic types </зануда>
Highly Likely
Такая, что 9 basic types </зануда>
Все претензии к Роберто на почту
Tverd
Кстати в lua.h есть ещё none с индексом -1
Императорская Моль 🕊
Привет, надо сделать следующее: вызываю некую функцию, допустим api.method или api.another_method, и это вызывает другую функцию, в которой я могу получить имя вызываемой функции Пример: мне надо написать интерфейс для взаимодействия с неким сайтом, допустим, url будет http://example. com/method_name. Методов может быть много, и реализовывать однотипные функции под это не хочется, учитывая что каждая функция будет выполнять одну и ту же задачу - получать метатаблицу и парсить её в json
Snusmumriken
Привет, надо сделать следующее: вызываю некую функцию, допустим api.method или api.another_method, и это вызывает другую функцию, в которой я могу получить имя вызываемой функции Пример: мне надо написать интерфейс для взаимодействия с неким сайтом, допустим, url будет http://example. com/method_name. Методов может быть много, и реализовывать однотипные функции под это не хочется, учитывая что каждая функция будет выполнять одну и ту же задачу - получать метатаблицу и парсить её в json
Чётче поставь задачу. Ты хочешь написать программу, которая будет обращаться на разные кусочки сайта? Делаешь что-то подобное — function myapifunc(method, data) local url = "http://ex.com" .. "/" .. method local resp, code, err = https.request{ url = url, verb = data and "POST", headers = {["Content-Type"] = "application/json"}, body = data and json.encode(data) or nil } assert(resp, url .. " " .. code .. ": " .. err) return json.decode(resp) end local table_data = myapifunc("method", {foo = "bar"}) и радуешься жизни. Ну типа должно быть примерно такое. У тебя типа есть функция, которая обращается на сайт с методом и данными, и возвращает данные. Или ты хочешь чтобы оно делало то же самое при вызове функции в табличке, а ля api.mymethod(data), делало запрос на "http://ex.com/mymethod", и ещё при вызове api.othermethod(data), делало "http://ex.com/othermethod", но ты не хочешь писать в отдельности каждую функцию?
Snusmumriken
И да, "метатаблицы" и "парсинг в json" — это что-то странное, может быть ты хочешь получать от сайта json и парсить его в таблицу?
Igor
И да, "метатаблицы" и "парсинг в json" — это что-то странное, может быть ты хочешь получать от сайта json и парсить его в таблицу?
Я, кажется, понял, чего он хочет. Кучу луёвых функций, каждая из которых стучится в разный API метод. Типа функция смотрит, как она называется при вызове, и использует своё название в качестве API метода для запроса. Ну а про метатаблицы ляпнул не зная, что это такое.
Igor
Нужно сделать примерно так, как написал снус.
Igor
Создать метатаблицу с функцией __index и в ней сделать вызов этого метода
Igor
что-то типа api_mt = { __index = function(self, index) local table_value = rawget(self, index) if table_value then return table_value else return function(...) return self:apiCall(index, ...) end end end }
Igor
Но это не очень хорошая практика
Igor
С таким индексом при обращении к таблице будет производиться проверка, есть ли в таблице айтем с таким ключом, если есть - возвращаем его, если нет - создаём и возвращаем функцию, которая внутри себя выполняет self:apiCall() метод, передавая первым аргументом имя метода, который указали при обращении. P.S. rawget/rawset - получение/установка значений в обход метавызовов.
Императорская Моль 🕊
Хм, спасибо, почитаю еще и попробую
Александр
А вопрос был не в том, как из дочерней функции получить имя родительской?
Igor
https://www.lua.org/manual/5.1/manual.html#2.8
Igor
Вот тут все тонкости хорошо описаны
Александр
Я к тому, что ему не debug.getinfo() нужен был?
Александр
Тут же задача решается одной строчкой из без метатаблиц, нет?
Igor
Тут же задача решается одной строчкой из без метатаблиц, нет?
Там дело в том, что в поставленной задаче есть несколько решений, при решении с debug.getinfo() в любом случае нужно создавать самому функции.
A
Коллеги, с Днём знаний! Подскажите пожалуйста, можно ли где-нибудь посмотреть на красивую реализацию конечного автомата?
Leon174
Уж не знаю, красивое или нет https://github.com/kyleconroy/lua-state-machine
Leon174
Хм, не на корутинах. Да, не очень красивое.
A
Вот )) В реальных условиях требуется задержка, а таймер в "академическом" варианте у меня некрасивый получился 😅 Почти как на С++
Aydar
Кто-нибудь использовал https://github.com/xmake-io/xmake? Лучше или хуже premake? По описанию вроде круто но пробовать лень
Leon174
Интересное, релизнутое https://github.com/tami5/sqlite.lua
Александр
Кто-нибудь использовал https://github.com/xmake-io/xmake? Лучше или хуже premake? По описанию вроде круто но пробовать лень
это ответвление примейка, основной плюшкой которого пытаются если правильно помню выставить менеждер пакетов, но я бы не рекомендовал - штука на поиграться и забыть, примейк в этом плане проще и стабильнее
fgntfg
Ох уж эти lua программисты
Igor
Да вообще... Все lua программисты думают только об одном, и это ужасно!
Императорская Моль 🕊
Почему первый вариант работает, а второй выдаёт ошибку "} ожидалось чтобы закрыть { на 18 строке"?
Императорская Моль 🕊
Snusmumriken
Потому что Content-Type это переменная Content минус переменная Type. И даже в таком виде это нельзя использовать как ключ таблицы.