Обратите внимание, что этот вопрос касается чистого Lua. У меня нет доступа к какому-либо модулю или стороне C. Кроме того, я не могу использовать IO, ОС или библиотеку отладки.
Я пытаюсь создать функцию, которая принимает в качестве параметров:
Под «вызываемым значением» я подразумеваю значение что можно назвать. Это может быть:
__ call
) Вот пример вызываемой таблицы:
local t = {}
setmetatable(t, {
__call = function() print("Hi.") end
})
print(type(t)) --> table
t() --> Hi.
Вот функция:
function delay(seconds, func)
-- The second parameter is called 'func', but it can be anything that is callable.
coroutine.wrap(function()
wait(seconds) -- This function is defined elsewhere. It waits the ammount of time, in seconds, that it is told to.
func() -- Calls the function/table.
end)()
end
Но у меня проблема. Я хочу, чтобы функция выдавала ошибку, если параметр func не вызывается.
Я могу проверить, функция ли это. Но что, если это таблица с метатаблицей, которая позволяет вызывать?
Если метатаблица таблицы не защищена полем __ metatable
, тогда я могу проверить метатаблицу, чтобы узнать, вызывается, но в противном случае, как бы я это сделал?
Обратите внимание, что я также думал о попытке вызвать параметр 'func' с помощью pcall
, чтобы проверить, вызывается ли он, но чтобы сделать это, я должен назвать это преждевременно.
По сути, вот проблема: Мне нужно знать, можно ли вызвать функцию / таблицу, но не пытаясь ее вызвать.