2012-06-18 35 views
4

我有以下功能:有沒有什麼辦法可以避免包含無法訪問的return語句?

func fitrange(a, x, b int) int { 
    if a > b { 
     a, b = b, a 
    } 
    switch true { 
    case x < a: 
     return a 
    case x > b: 
     return b 
    default: 
     return x 
    } 
} 

轉到編譯器抱怨說,「函數沒有返回語句結束」即使通過switch聲明每一個可能的路徑返回一個值。除了在函數的末尾添加虛擬return聲明之外,有什麼方法可以解決這個問題嗎?

回答

7

而不是添加在最後一回,你也可以通過添加恐慌平息編譯器。這不是一個壞主意,因爲如果你的代碼包含一個錯誤,並且「無法訪問」的行被觸及,你的程序將立即停止,而不是提前給出一個潛在的錯誤答案。

+2

雖然這是事實,但我認爲它不應該是正確的答案。唯一一次在函數結尾出現「恐慌(」無法訪問「)'意義的是當你有一個永不停息的無限循環時。 –

+3

@StephenWeinberg:我不同意。 'panic(「Unreachable」)遠遠好於你不認爲可能會被擊中的return語句,因爲a)它表示程序員期望這段代碼無法訪問,b)預期返回語句從未被擊中可能不會返回一些明智的東西,所以最好是恐慌而不是潛在的腐敗數據。 –

+1

這是真的,但在示例代碼中,您可以將默認值移動到函數的末尾。沒有使用「恐慌」,它會有相同的效果。看Ryan的答案。我沒有使用'panic'的問題,但是隻有在您確信沒有辦法修改代碼才能讓最後一條語句返回時。 –

10

切換後刪除default全部和return x

像:

func fitrange(a, x, b int) int { 
    if a > b { 
     a, b = b, a 
    } 
    switch true { 
    case x < a: 
     return a 
    case x > b: 
     return b 
    } 
    return x 
} 
相關問題