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