Objective Caml version 3.11.0
# let rec last l=
match l with
[] -> failwith("Empty list")
|a::[] -> a
|a::r -> last r;;
val last : 'a list -> 'a = <fun>
# last [];;
Exception: Failure "Empty list".
>let rec last l =
match l with
[] -> failwith("Empty list")
| a::[] -> a
| a::r -> last r;;
val last : 'a list -> 'a
>last [];;
last [];;
^^^^^^^
stdin(8,1): error FS0030: Restriction de valeur....
>last ([]:int list);;
System.Exception: Empty list
à FSI_0002.last[a](FSharpList`1 l)
à <StartupCode$FSI_0003>.$FSI_0003.main@()
Arrêt en raison d'une erreur
如果能够在不触发值限制错误的情况下将空列表作为参数传递,我该怎么做?
答案 0 :(得分:1)
我认为你必须在某个地方放置一个类型注释,或者在空列表中(如你所知)或者在最后一次调用的结果:(last [] : int)
。
答案 1 :(得分:0)
你可以做到
last<obj> []
但是fsi会给你一个耳光,因为上次从未明确声明它的类型参数。