2017-10-22 4 views
0

Ich habe versucht, das Ergebnis List.max_elt einer nicht leeren Liste auszupacken, die immer vorhanden sein sollte, also dachte ich Option.value_exn wäre das richtige Werkzeug. Aber es schlägt mit einem seltsamen Fehler fehl:Fehler bei Verwendung von Option.value_exn

# List.range 0 10 |> List.max_elt ~cmp:compare;; 
- : int option = Some 9 

# Option.value_exn (Some 9);; 
- : int = 9 

# List.range 0 10 |> List.max_elt ~cmp:compare |> Option.value_exn;; 
Error: This expression has type 
     ?here:Lexing.position -> 
     ?error:Base.Error.t -> ?message:string -> 'a Base.option -> 'a 
     but an expression was expected of type int option -> 'b 

Kann mir jemand diesen Fehler erklären?

Ich benutze OCaml 4.05.0 und die neueste Core-Bibliothek.

Antwort

1

Das Problem hier ist, dass etwas (ich vermute Option.value_exn) optionale Argumente. Wenn Sie es als Option.value_exn x schreiben, weiß OCaml, dass die optionalen Argumente nicht verwendet werden, aber wenn Sie es als x |> Option.value_exn schreiben, tut es das nicht.

Verwandte Themen