zm.PCall 保护执行函数

文章目录
  1. 1. 功能
  2. 2. 语法
  3. 3. 参数
  4. 4. 返回值
  5. 5. 示例
  6. 6. 备注

功能

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

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

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

语法

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

参数

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

返回值

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

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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: 初次加入