vb脚本中的递归函数返回值



请参见下面的函数fnWaitCheckFinalStatus,如果在下面的代码中执行Else部分,则函数fnWaitCheckFinalStatus返回的值为空白,因为函数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

如果您从递归返回,请考虑"传递"函数结果,就像下面的代码一样(注意带有!!评论):

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,所以我也消除了它。

一般来说,这里没有明显的理由使用递归,因为您传递的参数与接收的参数完全相同,因此递归调用将与其调用者作用域完全相同。使用循环代替。

最新更新