Hello, you have come here looking for the meaning of the word
Module:fun/isCallable. In DICTIOUS you will not only get to know all the dictionary meanings for the word
Module:fun/isCallable, but we will also tell you about its etymology, its characteristics and you will know how to say
Module:fun/isCallable in singular and plural. Everything you need to know about the word
Module:fun/isCallable you have here. The definition of the word
Module:fun/isCallable will help you to be more precise and correct when speaking or writing your texts. Knowing the definition of
Module:fun/isCallable, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.
local debug_track_module = "Module:debug/track"
local table_get_metamethod_module = "Module:table/getMetamethod"
local require = require
local type = type
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function get_metamethod(...)
get_metamethod = require(table_get_metamethod_module)
return get_metamethod(...)
end
--[==[
Return {true} if the input is a function or functor (an object which can be called like a function, because it has a {__call} metamethod).
Note: if the input is an object with a {__call} metamethod, but this function is not able to find it because the object's metatable is protected with {__metatable}, then it will return {false} by default, or {nil} if the {allow_maybe} flag is set.]==]
return function(obj, allow_maybe)
if type(obj) == "function" then
return true
end
-- An object is callable if it has a __call metamethod, so try to get it
-- with get_metamethod().
local success, __call = get_metamethod(obj, "__call")
-- If this succeeds, `obj` will only be callable if the __call metamethod is
-- a function (i.e. it can't itself be a callable table), so don't recurse
-- to check it.
if __call and type(__call) == "function" then
return true
-- If not, then the metatable is protected, so it's not possible to know if
-- `obj` is callable without actually calling it.
elseif not success then
debug_track("fun/isCallable/protected metatable")
if allow_maybe then
return nil
end
end
return false
end