如果我逐行将此代码放到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中有效?
答案 0 :(得分:2)
我认为Core.Std.List.nth
具有类型'a list -> int -> 'a option
以便在int超出范围时处理这种情况。标准库List.nth
的类型为'a list -> int -> 'a
。它引发了超出范围的异常。
如果您在一个案例中使用Core.Std.List
,而在另一个案例中使用标准List
,则可以解释其中的差异。