【问题标题】:Recursive Function return value in vb scriptvb脚本中的递归函数返回值
【发布时间】:2014-08-20 16:14:22
【问题描述】:

请参见下面的函数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

【问题讨论】:

    标签: vbscript qtp hp-uft


    【解决方案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 以保持代码更简单(一个入口点,一个出口点),所以我也将其删除了。

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

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 2022-11-05
      • 2012-04-21
      • 2020-10-10
      • 2021-06-11
      • 2012-03-11
      • 2017-05-14
      • 2014-07-13
      相关资源
      最近更新 更多