2015-11-12 80 views
0

是否可以從中退出子程序 subB,該子程序是由subA調用的?從被調用函數中退出一個調用子程序

public subA() 
    call subB() 
end sub 

subB() 
    If true then 
     'exit subA 
    end if 
    'continue 
end sub 

如果這是不可能的,那麼最好的辦法是什麼? 我已經搜索過這個網站,但所有類似的問題都有解決其他「問問」人員具體問題的答案。他們不適合我。

+1

兩條建議,第一次在調用subB和退出之前做你的邏輯測試。 2nd chnge subB返回一個函數,返回一個布爾值,測試返回並退出子。 –

+0

我知道這兩種方式。我的問題是:什麼是最好的**方法。我知道,通常把函數應該做的每件事都放在函數內部是很有意義的,這樣任何想使用這個函數的人都不必知道實現。除了subB的全部點是邏輯測試。它只是其中的一小部分。 – MJH

+0

如果subB的一部分要影響SubA的操作,那麼當然你不能在不理解SubA的實現的情況下使用subB。 –

回答

1

subB的功能和使用返回值來告訴subA退出:

public subA() 
    if not subB() then 
     Exit Sub ' <--- new 
    end if 
end sub 

function subB() as boolean 
' returns True on success, False on failure. 
    If <<some condition for exiting subA>> Then 
     subB = False '<--- new - cause subA to exit 
     Exit Function 
    end if 
    'continue 
    subB = True '<--- new - tell subA it doesn't need to exit 
End Function 

編輯:本最好方式是一個是在上下文中最可讀性和可維護性的特定的代碼。使用有意義的東西 - 沒有硬性規則。例如:

  • 您可以納入到subBsubA;這樣你就不會有嵌套退出問題。
  • 你可以在呼叫者的subAsubBOn Error使用Err.Raise。但是,這將錯誤處理與正常的控制流量混合在一起,這往往會降低可維護性。