我试图打开非空列表List.max_elt
的结果,该列表应始终存在,因此我认为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
有人可以向我解释这个错误吗?
我正在使用OCaml 4.05.0和最新的Core库。
答案 0 :(得分:1)
这里的问题是某些东西(我猜Option.value_exn
)带有可选参数。当您将其写为Option.value_exn x
时,OCaml知道可选参数未被使用,但当您将其写为x |> Option.value_exn
时,它不会。