You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验作为参数传入其他函数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:30:06