Пустячок. Косвенный вызов глобальной функции
Общая задача - косвенный вызов метода. Решение на примере глобальной таблицы имен _G , расширяемое, естественно до любой объектной модели, реализованной таблицами, будь то наследование прототипированием или копированием.
Суть решения - при обращениии к несуществующему ключу таблицы (в нашем случае - вызове функции) - запускать прокси-функцию, формирующую нужный внешний вызов. В иллюстративных целях прокси-функция выводит в лог информацию о вызове и больше ничего не делает. Валидации вызова (типа isFunction) не оформлено, что приведет к побочному эффекту - при попытке доступа к несуществующей переменной будет вызвана прокси-функция.
local function externCall(method,...) print("call external method "..method.." with "..#{...}.." params") for ndx,val in ipairs({...}) do print(" #"..ndx.." ["..type(val).."] "..tostring(val)) endendlocal mt = {} mt.__index = function(t, k) t[k] = function(...) externCall(k,...) end return t[k]end
setmetatable(_G, mt)
-- использование
-- использование
test1(1,2,3,4,5,6) test2("раз","два","три")test3()
Комментариев нет:
Отправить комментарий