跳到主要内容

zm.PCall 保护执行函数

🎯功能

以保护模式调用执行函数, 避免由于异常错误导致整个脚本停止结束.

支持一个错误处理函数与一个必定执行函数, 支持传入任意数量参数.

可以实现调用按键函数免写可选参数功能. 并且翻译按键错误信息中'idxxxx'的准确内容

📜语法

结果 = zm.PCall(执行函数名[, 任意数量参数][, 错误处理函数名[, 任意数量参数][, 必定执行函数名[, 任意数量参数] ] ])

📥参数

参数数据类型解释
执行函数名函数型需要保护执行的函数名, 注意这里填写的是函数名, 不要在后面加括号变成调用函数!
任意数量参数非函数型需要传入前面函数的参数, 如果有多个参数要传入, 则直接写多个参数, 用逗号隔开, 支持非函数的任意类型参数
错误处理函数名函数型可选, 如果前面执行函数内部出现异常错误时, 将会执行本处理函数, 如果没有前面执行函数没有出错, 那么就不会执行本处理函数
任意数量参数非函数型可选, 需要传入前面函数的参数, 如果有多个参数要传入, 则直接写多个参数, 用逗号隔开, 支持非函数的任意类型参数
必定执行函数名函数型可选, 不管前面函数执行是否出错, 本函数都将必定会执行一次. 填写本参数前面必须要有错误处理函数.
任意数量参数非函数型可选, 需要传入前面函数的参数, 如果有多个参数要传入, 则直接写多个参数, 用逗号隔开, 支持非函数的任意类型参数

📤返回

任意类型 , 根据调用的函数自身返回值决定结果.

💡示例

Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim 结果

TracePrint "正确的内容可以正常执行并返回正确结果"
结果 = zm.PCall(乘法, 2, 4)
TracePrint "正确结果 = ", 结果

TracePrint "对乘法函数传入汉字参数会提示异常错误信息, 但是不会停止整个脚本运行"
结果 = zm.PCall(乘法, "紫", "猫")
TracePrint "错误结果 = ", 结果

TracePrint "可加入错误处理函数, 当出错后执行错误处理"
结果 = zm.PCall(乘法, "紫", "猫", 乘法异常处理, "学", "院")
TracePrint "处理结果 = ", 结果

TracePrint "未出现错误, 则不执行错误处理函数"
结果 = zm.PCall(乘法, 2, 4, 乘法异常处理, "学", "院")
TracePrint "处理结果 = ", 结果

TracePrint "可加入必定执行函数, 不管是否出错, 函数必定会被执行"
结果 = zm.PCall(乘法, "紫", "猫", 乘法异常处理, "学", "院", 乘法最终处理)
TracePrint "处理结果 = ", 结果

TracePrint "乘法函数中参数b是可选的, 有默认值, 所以可以不写"
结果 = zm.PCall(乘法, 2)
TracePrint "免写结果 = ", 结果

Function 乘法(a, b)
b = b or 10
乘法 = a * b
End Function

Function 乘法异常处理(c, d)
乘法异常处理 = c & d
End Function

Function 乘法最终处理(x)
TracePrint "我是最终处理函数, 必定会被执行一次", x
End Function

📘备注

  • 非常强大的异常处理函数, 参考其他语言的try...catch...finally设计.
  • 可以用本函数保护执行可能出错的函数, 并且调用相应的错误处理解决函数.
  • 可以用本函数实现免写可选参数功能.
  • V4.2025: 初次加入