這是一個類型檢查器的工作,它是在編譯期間(靜態時)自動生成的。類型檢查器(即編譯器)確保由函數創建的所有值具有相同的類型,並且類型在編譯時靜態定義。您將無法編譯一個函數,該函數會創建不同類型的值,因爲在編譯期間您將遇到類型錯誤。這是所有靜態類型語言的基本屬性,例如Java,C和C++也具有相同的屬性。
所以,你可能使用的是混淆的術語。可能是這樣的,你實際上試圖測試的是該值屬於總和類型的特定變體。舉例來說,如果你有一個名爲一筆型numbers
定義爲:
type t =
| Float of float
| Int of int
,你想測試功能truncate
,定義爲
let truncate = function
| Float x -> Int (truncate x)
| x -> x
總是返回Int
變種,那麼你可以做這如下所示:
let is_float = function Float _ -> true | _ -> false
let is_int = function Int _ -> true | _ -> false
assert (is_int (truncate 3.14))
來源
2017-01-06 19:34:44
ivg
如果該函數沒有註釋,它也是不必要的:-) OCaml是一種強類型語言,您不能計算錯誤的值類型。這是我們喜歡的原因之一。當然這是有道理的,根據*值*來考慮是否被允許。 –
@JeffreyScofield。我應該早些提到這一點,但我無法測試特定的值,因爲被測試的函數會隨機生成一個類型的實例。我真的不知道如何單元測試這樣的功能...... –