我經常在let語句中進行模式匹配,其中我知道結果的形狀。很顯然,我不能指望編譯器通常會推斷這些知識,但也許有一種更簡單的方式來做到這一點。警告8:let語句中的模式匹配警告不完整
舉個例子,請看下面的代碼:
type foo = A of int | B of string
let x = (true, A 0)
let (b, A i) = x in i + 2
哪個正確警告我,說的(_, B _)
結果是不匹配的。一種可能的方法是明確處理丟失的案例,如下所示:
let (b,i) = match x with
| (a, A j) -> (a,j+2)
| _ -> failwith "implementation error!"
但是,這掩蓋了實際的計算。有更簡潔的選擇嗎?
編輯: Jeffrey Scofield表示,在沒有嵌套的情況下,顯式轉換函數效果很好。是否還有嵌套類型匹配的版本?
通常安全的方法是定義'i'然後定義'x',這樣你就可以提取'i'而沒有運行時錯誤的風險;例如'讓我= 0 ;;讓x =(true,A i);; i + 2 ;;' –