[英]why does F# failwith return a generic type rather than Exception type
文檔並沒有說failwith
返回Exception
。 它說它會產生一個F#異常。 異常系統與返回值的正常控制流分開。 因此這個名字,它是特殊的 。
例外情況,當“拋出”(這是一個比文檔中使用的“生成”更不模糊的術語,我認為),將在堆棧中向上移動,直到遇到try ... with
處理此特定類型的異常的構造,或者如果沒有將終止該程序。 有關詳細信息,請參閱有關異常處理的F#文檔 。
failwith
返回'a
以便它可以在任何地方使用,因為'a
可以被推斷為任何東西。 它可以假裝返回任何內容,因為它根本不會實際返回,與大多數函數不同,它總是拋出異常。 如果它已經返回Exception
那么它只能用於期望評估為Exception
表達式中,這種情況異常罕見,因為通常會拋出異常,而不會返回異常。 例如,給定:
if i > 0 then
i
else
failwith "i is negative"
如果failwith
返回了Exception
,那么編譯器會在這里抱怨一個int
被期望而不是Exception
因為第一個分支的計算結果為int
。 但是因為failwith
返回一個'a
而不是,它被推斷為一個int
本身,一切都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.