请注意,此问题与纯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
字段的保护,那么我可以检查该元表是否可调用,否则,我将如何处理?
[请注意,我还考虑过尝试使用pcall
调用'func'参数,以检查它是否可调用,但是要这样做,我需要过早调用它。
基本上,这是问题所在:我需要知道一个函数/表是否可以调用,但是没有尝试调用它。