[英]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
到底是什么? 據我所知,這是允許的,因為Ok
和Error
屬於同一類型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 a
和Error b
這樣的值確實是同一類型。 這有點像Some 3
和None
是同一類型。
請注意, Result.t
僅采用兩種類型,一種用於良好結果,一種用於錯誤。 最后一個示例的問題在於,為了獲得良好的結果,您使用了兩種不同的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.