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

时间:2014-08-18 11:04:02

标签: vbscript qtp hp-uft

请参阅下面的函数fnWaitCheckFinalStatus如果在下面的代码中执行了其他部分,那么按函数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

1 个答案:

答案 0 :(得分: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来保持代码更简单(一个入口点,一个出口点),所以我也将其删除了。

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