[已解决]关于方法SetError()和@error 用法的理解问题。
本帖最后由 wiley_wang 于 2013-6-5 15:45 编辑对于SetError和@error的用法有些地方理解不了,希望各位帮忙解答解答!!!
这是我写的一个例子:
Test1()
Func Test1()
Local $result = 1
test(1)
$result += @error
ConsoleWrite("Test::::::::::::::::::" & $result & @CRLF)
test(0)
$result += @error
ConsoleWrite("Test::::::::::::::::::" & $result & @CRLF)
test(1)
$result += @error
ConsoleWrite("Test::::::::::::::::::" & $result & @CRLF)
test(0)
$result += @error
ConsoleWrite("Test::::::::::::::::::" & $result & @CRLF)
EndFunc
Func test($x)
If $x = 1 Then
SetError(1, 3, 0)
; 根据其他测试用例,可以了解到SetError中第三个参数是整个SetError这个function的返回值、
; 1. 我想问问,这个返回值是可以随便写的么,有没有什么特定的值?
; 2. 第二个参数代表什么,完全没理解,希望各位解答一下,有没有什么方法使用这个参数的结果?
Return @error
Else
Return @error
EndIf
EndFunc
@error 据我了解是返回关于最近的function所设置的@error的值,这个特性有没有办法改变 呢? 据我了解我都不知楼主想表达啥 “Return @error” 这样写是错误的。这样返回的并非 @error ,而是将@error 值当成了返回值。
如果你只需要@error,不需要返回值,就不要 Return xxx,或者 Return SetError(x)
如果你既需要@error,也需要 @extended 扩展值,可以 SetError(x, xx)
如果你既需要@error,也需要 @extended 扩展值,还需要返回值,那么可以 SetError(x, xx, xxx)
这些值具体怎么用,可以依据自己的需要或方便使用来定,可以多看看 UDF 写法 看帮助~不是说的很明白了么
下面是帮助中的例子
SetError:设置宏 @error 的值.
SetError ( 错误码 [, 扩展值 [, 返回值]] )Local $iResult = myDiv(5, 0)
If @error Then
MsgBox(4096,"错误", "除数为 0")
Else
MsgBox(4096, "结果", $iResult)
EndIf
Exit
Func myDiv($iDividend, $iDivisor)
If $iDividend = 0 And $iDivisor = 0 Then
SetError(2) ;表达式为 0/0
ElseIf $iDivisor = 0 Then
SetError(1) ;除数为 0
EndIf
Return $iDividend / $iDivisor
EndFunc ;==>myDiv
回复 3# afan
谢谢! 回复 4# haijie1223
{:face (52):} 看了没看明白才来问问嘛...... 回复 3# afan
只是恰巧碰到了这个,以后会抽空多看看UDF,谢谢指教 不是很理解异常是什么处理的 来看看 回复 6# wiley_wang
@error 的值是用SetError来设置的,这样说能明白吗?你也可以认为@error是一个“标志”开关,针对处理结果不同,设置“标志”为不同的值,所以根据“标志”的返回值就知道程序得到了什么样的结果。
例如:你想利用一个函数来判断一个数是正数还是负数,可以利用设置@error的值来判断。Dim $a = 0, $b = 1, $c = -1
zf($c)
If @error = 1 Then MsgBox(0, "", "变量为0")
If @error = 2 Then MsgBox(0, "", "变量为正数")
If @error = 3 Then MsgBox(0, "", "变量为负数")
Func zf($num)
If $num = 0 Then SetError(1)
If $num > 0 Then SetError(2)
If $num < 0 Then SetError(3)
EndFunc ;==>zf 我的理解:
@error 反映调用一个函数时该函数的执行情况. 一般我们在成功得到结果时,设为0,失败时设为1等. 当然不一定这样,你自己根据自己的喜好或要求而设定.
SetError 这是内置函数, 让我们得以在自定义函数内设置它的@error. 如果不用它, 那么所有的自定义函数的@error值都被默认地设为0.
借用4楼代码进一步说明吧;Local $iResult = myDiv(5, 0)
If @error Then
If @extended = 1 Then
MsgBox(4096,"输入错误", "除数为0")
ElseIf @extended = 2 Then
MsgBox(4096,"输入错误", "除数和被除数均为0")
Else
MsgBox(4096,"错误", "发生了未知错误")
EndIf
Else
MsgBox(4096, "结果", $iResult)
EndIf
Func myDiv($iDividend, $iDivisor)
If $iDividend = 0 And $iDivisor = 0 Then
Return SetError(1, 2) ;表达式为 0/0,设置@error 及其扩展值
ElseIf $iDivisor = 0 Then
Return SetError(1, 1) ;除数为 0,;同上,设置@error 及其扩展值,
;但扩展值有所不同,以示这是另一个错误.
Else
Return SetError(0, 0, $iDividend / $iDivisor) ; 返回正确结果
EndIf
Return SetError(1, 3) ;未知错误
EndFunc
页:
[1]