1

「Exit Function」ステートメントが複数ある関数を書きたいと思います。終了機能を実行する前に、クリーンアップ コードが常に実行されるようにする方法はありますか?

これが私が実際にやろうとしていることです。テスト自動化プロジェクトで、関数のコードが開始される前に特定の関数を実行し、関数を終了する前に別の関数を実行するという標準を設定したいと考えています。これを行う簡単な方法はありますか?

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 に答える