usernameak
Mike_Went
notepad++
Mike_Went
usernameak
а ты?
ну я по луям искал кое чё
notepad++
Mike_Went
usernameak
Mike_Went
usernameak
..."теперь выходи"?
Snusmumriken
Mike_Went
кота
кота
Тебе встроить, чтоб плагины клепали?
usernameak
да
Snusmumriken
да
Кстати, в чём реальная проблема дебилов? Можно же выдавать плагинам отдельный стейт, и проверять правильность вызова апишки на сишной стороне. Луа в целом дебилорезистентная жеж. Просто даже статика не защитит от откровенного дебилизма.
Snusmumriken
Откровенным дебилам скорее даже гуй выдавать, или кастомный "типа"-скрипт на in-out-переменных. Или выдавать набор колбеков. Или выдать поле для кода на манер:
$in_var_foo
$in_var_bar
$out_var_baz = $in_var_foo + $in_var_bar, при исполнении — пройтись препроцессором с заменой, и например лоадстрингнуть. Чтобы контролировать даже вызовы всего пользовательского.
Leon174
Ilya
А прикольная книжка, кстати 😂
Anonymous
А как создать неймспейс, а не класс через сол?
При создании таблицы, я могу обращаться через точку, но видел более удобный способ через : как это реализовать?
Wsevolod
Dmitrii
Всем привет. А кто-нибудь знает, можно ли передавать в Луа из c++ коннекшен к базе данных? Другими словами юзать общий коннекшен к sqlite и в c++ коде и в луа скрипте
Dmitrii
Погуглил, не нашел такого сходу
Wsevolod
Wsevolod
А можно как-то собрать C-модуль, чтобы стектрейс луа вместо ? показывал сишку?
Snusmumriken
Александр
Snusmumriken
Ну это уже выглядит оверкиллом.
Александр
Ну это уже выглядит оверкиллом.
Использовать сырой С-API в С++ - плохая практика. Особенно если есть удобные, быстро подключаемые обертки, позволяющие сделать тоже самое за меньшее количество строк и почти не думая
Dmitrii
Alexey
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
Highly Likely
Highly Likely
Wsevolod
Highly Likely
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 и парсить его в таблицу?
Императорская Моль 🕊
Я, кажется, понял, чего он хочет. Кучу луёвых функций, каждая из которых стучится в разный 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() нужен был?
Александр
Тут же задача решается одной строчкой из без метатаблиц, нет?
A
Коллеги, с Днём знаний!
Подскажите пожалуйста, можно ли где-нибудь посмотреть на красивую реализацию конечного автомата?
Igor
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
fgntfg
Ох уж эти lua программисты
Igor
Да вообще... Все lua программисты думают только об одном, и это ужасно!
Императорская Моль 🕊
Почему первый вариант работает, а второй выдаёт ошибку "} ожидалось чтобы закрыть { на 18 строке"?
Императорская Моль 🕊
Snusmumriken
Потому что Content-Type это переменная Content минус переменная Type. И даже в таком виде это нельзя использовать как ключ таблицы.