Возвращаемое значение рекурсивной функции в сценарии vb

См. ниже функцию 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

person Sahil    schedule 18.08.2014    source источник


Ответы (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 в этом случае, чтобы упростить код (одна точка входа, одна точка выхода), поэтому я исключил и это.

Вообще говоря, здесь нет очевидной причины для использования рекурсии, поскольку вы передаете точно такой же аргумент, как и получаете, поэтому рекурсивный вызов будет делать то же самое, что и его область действия. Вместо этого используйте цикл.

person TheBlastOne    schedule 18.08.2014