我想编写一个函数,其中有多个“退出函数”语句。有没有办法让我确保在执行退出功能之前始终运行一些清理代码?
这就是我真正想做的事情,我想在我的测试自动化项目中设置一个标准,即某个函数应该在任何函数的代码开始之前运行,并在退出函数之前运行另一个函数。有什么简单的方法可以做到这一点吗?
由于在 VBScript 中将函数包装在函数中并不容易(预计会出现参数传递问题),因此您应该使用一个类:
Class cWrap
Private m_sName
Public Function init(s)
Set init = Me
m_sName = s
WScript.Echo "*** enter", m_sName
End Function ' init
Private Sub Class_Terminate()
WScript.Echo "*** leave", m_sName
End Sub ' Class_Terminate
End Class ' cWrap
Function f1(n)
f1 = "f1 called"
Dim o : Set o = New cWrap.init("f1")
End Function ' f1
Function f2(n)
f2 = "f2 called"
Dim o : Set o = New cWrap.init("f2")
End Function ' f2
Ekkehard.Horner 的包装类非常有用,如果您有超出函数范围的事情要做,例如秒表、运行堆栈查看器或 err 对象上的异常捕获器。但是当您在函数范围内有事情要做并且包装类呈现无用时,您可以考虑使用该Do Loop While False
模式:
Function DoSomeMessyStuff()
Do
call doStuff()
If somecondition Then Exit Do
call doMoreStuff()
If somecondition Then Exit Do
call doEvenMoreStuff()
If somecondition Then Exit Do
call andEvenMoreStuffHere()
Loop While False ' Always exits
' Finally:
call cleanUpTheMess()
End Function