0

fnWaitCheckFinalStatus如果 Else 部分在下面的代码中执行,请参见下面的函数,然后函数返回的值将fnWaitCheckFinalStatus变为空白,因为函数 this 被递归调用fnWaitCheckFinalStatus

有没有办法获得fnWaitCheckFinalStatus退出函数后函数的返回值,函数应该退出其所有状态。

我怎样才能使它成为可能,对此有任何指示。

Function fnWaitCheckFinalStatus(objStatusBar)

    Dim blnRetValue : blnRetValue = True
    Dim i : i=0 

    If objStatusBar.Exist Then
        strValue=ObjStatusBar.GetROProperty("text") 

        Do
            wait 10
            strValue=ObjStatusBar.GetROProperty("text")
        Loop While strValue = "Task Started"

    End If

    strValue1=ObjStatusBar.GetROProperty("text")
    If strValue1="Task executed successfully" Then
        blnRetValue1=True
        fnWaitCheckFinalStatus = blnRetValue1
        Exit Function
    ElseIf strValue1="Task execution failed" Then
        blnRetValue1=False
        fnWaitCheckFinalStatus = blnRetValue1
        Exit Function
    Else
        Call fnWaitCheckFinalStatus(objStatusBar)
    End If  

End Function
4

1 回答 1

1

如果从递归返回,请考虑“传递”函数结果,就像在这段代码中一样(注意带有 !!! 注释的行):

Function fnWaitCheckFinalStatus(objStatusBar)

    Dim i : i=0 

    If objStatusBar.Exist Then
        strValue=ObjStatusBar.GetROProperty("text") 

        Do
            wait 10
            strValue=ObjStatusBar.GetROProperty("text")
        Loop While strValue = "Task Started"

    End If

    strValue1=ObjStatusBar.GetROProperty("text")
    If strValue1="Task executed successfully" Then
        fnWaitCheckFinalStatus = true
    ElseIf strValue1="Task execution failed" Then
        fnWaitCheckFinalStatus = false
    Else
        fnWaitCheckFinalStatus=fnWaitCheckFinalStatus(objStatusBar) ' !!!
    End If  

End Function

另外,我消除了结果缓冲区变量。你不需要它,所以你可以刮擦它。

此外,在这种情况下,我会避免exit function让代码更简单(一个入口点,一个出口点),所以我也消除了它。

一般来说,这里没有明显的理由使用递归,因为您传递的参数与收到的参数完全相同,因此递归调用的作用与其调用者范围完全相同。请改用循环。

于 2014-08-18T11:24:22.687 回答