Size: a a a

2019 November 16

VM

Vadim Misbakh-Soloviov in pro.lua
а так - любое отступление от "lowercase alphanum" при именовании файлов увеличивает шанс наступить на мину
источник

I

Igor725 in pro.lua
И снова у меня вопрос по C API луёвому.
Как мне правильно организовать вызов функции переданной в другую? То есть, предположим, что есть функция register у которой вторым аргументом передаётся другая функция (луёвая, не сишная, тут lua_tocfunction не прокатит) и эта переданная функция будет через какое-то время вызвана, но уже из другого места, то есть не из того же контекста. Как мне получить что-то типа ссылки на эту функцию, чтобы потом отправить её в стек и как обычно вызвать через lua_pcall/lua_call? Цель, если это важно, Lua 5.3.5
источник

I

Igor725 in pro.lua
У гугла спрашиваю - молчит, но скорее я просто не могу придумать, как это правильно спросить у гугла
источник

DF

Dollar Føølish in pro.lua
Интересный вопрос
источник

DF

Dollar Føølish in pro.lua
Жаль что я не знаю так хорошо луашный апи
источник

DF

Dollar Føølish in pro.lua
Возможно там можно достать какое-то обобщенное значение?
источник

I

Igor725 in pro.lua
Не то слово, полгугла перерыл, но везде только на материал про вызов сишных функций натыкаюсь
источник

DF

Dollar Føølish in pro.lua
Ну это если нет отдельного типа для функции
источник

DF

Dollar Føølish in pro.lua
Что то типа луашного воид*
источник

I

Igor725 in pro.lua
вообще сейчас попробую одну штуку
источник

I

Igor725 in pro.lua
сдаётся мне, что сработает
источник

I

Igor725 in pro.lua
сомневаюсь конечно, что мне в лицо краш не прилетит, но попробовать стоит, раз уж идея пришла
источник

DF

Dollar Føølish in pro.lua
Хорошо, напиши пожалуйста, если получится
источник

I

Igor725 in pro.lua
кк
источник

I

Igor725 in pro.lua
ех, не вышло
источник

I

Igor725 in pro.lua
Последним вариантом у меня осталось только передавать в сишную функцию не саму луёвую функцию, а её имя строкой и хранить её в глобальной таблице, получать через lua_getglobal, но этого мне меньше всего хотелось бы
источник

I

Igor725 in pro.lua
Но если не предложат более изящного решения, то именно так и придётся сделать
источник

D

Denis in pro.lua
а передать таблицу с функцией? Вида:
{
 do = function() print("done!") end
}

тоже не очень изящно)
источник

I

Igor725 in pro.lua
Вариант сам по себе не очень изящный, да, и тем более если внутри машины не будет ссылок на эту таблицу, то GC её подчистит, а хранить таблицу в переменной не очень затея, если и писать что-то в переменную, то только функцию без обвесов в виде таблицы, ибо тут они уже ненужными получаются
источник

S

Snusmumriken in pro.lua
Igor725
И снова у меня вопрос по C API луёвому.
Как мне правильно организовать вызов функции переданной в другую? То есть, предположим, что есть функция register у которой вторым аргументом передаётся другая функция (луёвая, не сишная, тут lua_tocfunction не прокатит) и эта переданная функция будет через какое-то время вызвана, но уже из другого места, то есть не из того же контекста. Как мне получить что-то типа ссылки на эту функцию, чтобы потом отправить её в стек и как обычно вызвать через lua_pcall/lua_call? Цель, если это важно, Lua 5.3.5
if (lua_isfunction(L, -1)) {
 lua_pushnumber(L, 100);
 lua_pushnumber(L, 500);
 // вызываем с двумя аргументами и одним ретурном
 lua_call(L, 2, 1);
 std::cout << lua_tonumber(L, -1) << std::endl;
}

При передаче функции типа
function(a, b) return a + b end оно выведет 600.
источник