1

我想编写一个函数,其中有多个“退出函数”语句。有没有办法让我确保在执行退出功能之前始终运行一些清理代码?

这就是我真正想做的事情,我想在我的测试自动化项目中设置一个标准,即某个函数应该在任何函数的代码开始之前运行,并在退出函数之前运行另一个函数。有什么简单的方法可以做到这一点吗?

4

2 回答 2

3

由于在 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
于 2012-04-08T19:06:01.387 回答
2

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
于 2012-04-10T12:57:50.580 回答