有兩個運算式可以結束目前子程式或程序的執行:return 和 fail 表達式。 一般而言,可呼叫者可能會在使用 return 或 fail 運算式執行所有語句之前結束執行。
return 表示式只會結束目前可呼叫的執行,而 fail 結束整個程序的執行,並導致運行時間錯誤。
傳回表達式
return 表示式會從目前的可呼叫端結束,並將控件傳回給被呼叫者。 它會藉由彈出堆疊框架來變更執行的內容。
表達式一律會將值傳回給被呼叫者的內容;它是由 關鍵詞 return所組成,後面接著適當類型的表達式。 傳回值會在執行任何終止動作並傳回控件之前進行評估。 終止動作包括清除和釋放在可呼叫內容中配置的量子位。 在模擬器或驗證程式上執行時,終止動作通常也會包含與這些量子位狀態相關的檢查。 例如,他們可能會檢查它們是否與所有仍存留的量子位適當分離。
傳回 Unit 值的可呼叫端 return 表示式可能會省略。 在此情況下,當所有語句完成並執行所有終止動作時,都會自動傳回控件。 可呼叫者可能包含多個 return 表達式,儘管無法自動產生包含多個 return 表達式之作業的相鄰實作。
例如,
return 1;
或
return ();
Fail 表達式
fail 表示式會完全結束計算。 它對應於中止程式的嚴重錯誤。
它是由 關鍵詞 fail所組成,後面接著類型為 String的表達式。
String 應該提供所發生失敗的相關信息。
例如,
fail "Impossible state reached";
或者,使用 插補字串、
fail $"Syndrome {syn} is incorrect";
除了指定的 String之外,fail 表示式最好會收集並允許擷取程式狀態的相關信息。 這可協助診斷和補救錯誤的來源,而且需要執行運行時間和韌體的支援,這可能會因不同目標而異。