Size: a a a

2021 August 30

АК

Александр Караев... in pro.lua
Если я правильно понял, тебе нужно
mytbl = { big.. }
elem = deepcopy(mytbl.foo)
elem.bar = 1 -- mytbl и mytbl.foo не меняются
источник

CP

Companion Philipp in pro.lua
источник

CP

Companion Philipp in pro.lua
источник

G

GNU/Vsevolod in pro.lua
где lightuserdata?
источник

CP

Companion Philipp in pro.lua
Где-то в главе, какая разница?
источник

G

GNU/Vsevolod in pro.lua
Такая, что 9 basic types
</зануда>
источник

CP

Companion Philipp in pro.lua
Все претензии к Роберто на почту
источник

T

Tverd in pro.lua
Кстати в lua.h есть ещё none с индексом -1
источник
2021 September 01

D

Dmitru in pro.lua
Привет, надо сделать следующее: вызываю некую функцию, допустим api.method или api.another_method, и это вызывает другую функцию, в которой я могу получить имя вызываемой функции
Пример: мне надо написать интерфейс для взаимодействия с неким сайтом, допустим, url будет http://example. com/method_name. Методов может быть много, и реализовывать однотипные функции под это не хочется, учитывая что каждая функция будет выполнять одну и ту же задачу - получать метатаблицу и парсить её в json
источник

S

Snusmumriken in pro.lua
Чётче поставь задачу.
Ты хочешь написать программу, которая будет обращаться на разные кусочки сайта?
Делаешь что-то подобное —
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", но ты не хочешь писать в отдельности каждую функцию?
источник

S

Snusmumriken in pro.lua
И да, "метатаблицы" и "парсинг в json" — это что-то странное, может быть ты хочешь получать от сайта json и парсить его в таблицу?
источник

I

Igor725 in pro.lua
Я, кажется, понял, чего он хочет. Кучу луёвых функций, каждая из которых стучится в разный API метод. Типа функция смотрит, как она называется при вызове, и использует своё название в качестве API метода для запроса. Ну а про метатаблицы ляпнул не зная, что это такое.
источник

D

Dmitru in pro.lua
Да, метатаблицы перепутал, луа, если честно, только начал смотреть, обычные таблицы, а так да, именно это мне надо
источник

I

Igor725 in pro.lua
Нужно сделать примерно так, как написал снус.
источник

I

Igor725 in pro.lua
Создать метатаблицу с функцией __index и в ней сделать вызов этого метода
источник

I

Igor725 in pro.lua
что-то типа
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
}
источник

I

Igor725 in pro.lua
Но это не очень хорошая практика
источник

I

Igor725 in pro.lua
С таким индексом при обращении к таблице будет производиться проверка, есть ли в таблице айтем с таким ключом, если есть - возвращаем его, если нет - создаём и возвращаем функцию, которая внутри себя выполняет self:apiCall() метод, передавая первым аргументом имя метода, который указали при обращении.

P.S. rawget/rawset - получение/установка значений в обход метавызовов.
источник

D

Dmitru in pro.lua
Хм, спасибо, почитаю еще и попробую
источник

ВГ

Виктор Гриневский 🐧... in pro.lua
А вопрос был не в том, как из дочерней функции получить имя родительской?
источник