错误:此表达式具有类型(int * int)选项,但表达式的类型为'a *'b

时间:2015-12-31 09:21:10

标签: ocaml

如果我逐行将此代码放到utop上,那么它可以工作,但如果我将其编译为programm,那么我会看到错误。

module List = Core.Std.List;;

let () =
    let shifts  = [ (-1, -1); (0, -1) ] in
    let first = List.nth shifts 0 in
    let (a, b) = first in
    Printf.printf "%d %d\n" a b;
;;

错误消息:

Error: This expression has type (int * int) option
       but an expression was expected of type 'a * 'b

类型有什么问题以及为什么它在utop中有效?

1 个答案:

答案 0 :(得分:2)

我认为Core.Std.List.nth具有类型'a list -> int -> 'a option以便在int超出范围时处理这种情况。标准库List.nth的类型为'a list -> int -> 'a。它引发了超出范围的异常。

如果您在一个案例中使用Core.Std.List,而在另一个案例中使用标准List,则可以解释其中的差异。