簡體   English   中英

OCaml列表類型行為

[英]OCaml list types behavior

遵循Real World OCaml關於錯誤處理的章節,可以這樣構造一個列表:

utop # [ Ok 3; Error "abject failure"; Ok 4] ;;                           
- : (int, string) Result.t list = [Ok 3; Error "object failure"; Ok 4]

但是,我在本文和其他文章中都讀到“列表的所有元素都必須是同一類型”。

那么,類型(int, string) Result.t到底是什么? 據我所知,這是允許的,因為OkError屬於同一類型Result.t 但是, (int, string)的類似元組的表示法令我感到困惑,並且如果上面的內容可以接受,為什么這樣的東西也不好:

utop # [ Ok 3; Error "abject failure"; Ok "asdf"] ;;              
325 Error: This expression has type string but an expression was expected of type
             int

Result.t是參數化類型。 即,它采用兩種類型並將它們形成一個新類型。 這與list采用一種類型並將其形成新類型的方式相同。

類型[3; 4; 5] [3; 4; 5] [3; 4; 5]int list 也就是說,這是一個元素為整數的列表。

同樣,類型(int, string) Result.t是結果,其良好值由int給出,而錯誤由字符串給出。

對於給定的a和b類型選擇,像Ok aError b這樣的值確實是同一類型。 這有點像Some 3None是同一類型。

請注意, Result.t僅采用兩種類型,一種用於良好結果,一種用於錯誤。 最后一個示例的問題在於,為了獲得良好的結果,您使用了兩種不同的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM