如何校验作为参数传入其他函数的function是否真实存在?
传入函数参数的校验方案
你提供的示例是Lua语法,以下是对应场景的三种校验方案:
1. 基础类型校验
直接用Lua内置的type()函数判断参数类型是否为函数,足以覆盖大部分常规场景:
f1 = function() print("f1") end f2 = function(f) -- 校验参数是否为函数类型 if type(f) ~= "function" then -- 可根据业务需求自定义错误处理逻辑,比如返回错误、打印日志等 print("参数不是合法的可执行函数") return end f() end f2(f1) -- 正常执行输出f1 f2(f3) -- 命中校验逻辑,不会抛出执行报错
2. 兼容可调用表的进阶校验
如果你的业务需要支持Lua中设置了__call元方法的可调用表,可以封装通用的可调用判断逻辑:
-- 通用可调用判断函数 local function is_callable(var) if type(var) == "function" then return true end local meta = getmetatable(var) return meta and type(meta.__call) == "function" end f2 = function(f) if not is_callable(f) then print("参数不可调用") return end f() end
3. 兜底异常捕获方案
如果不需要提前校验,只想避免报错中断程序,可以用pcall包裹执行逻辑,捕获所有执行阶段的异常:
f2 = function(f) -- 用pcall安全执行,ok为布尔值表示执行是否成功,err为错误信息 local ok, err = pcall(function() f() end) if not ok then print("执行失败:"..err) -- 自定义错误处理逻辑 end end
内容的提问来源于stack exchange,提问作者Marek Fiołka
相关产品推荐
相关产品推荐

