Generics 如何避免'_a「;无需重新喷漆即可打印
对不起,我英语不好 我将从简单的示例开始:Generics 如何避免'_a「;无需重新喷漆即可打印,generics,ocaml,polymorphism,Generics,Ocaml,Polymorphism,对不起,我英语不好 我将从简单的示例开始: let find2 f g x = let rec _find2 = function | h::t -> if f h && g h then h else _find2 t | [] -> raise Not_found in _find2 ;;
let find2 f g x =
let rec _find2 = function
| h::t -> if f h && g h then h else _find2 t
| [] -> raise Not_found
in
_find2
;;
let find = find2 (fun _ -> true);;
find
具有类型
('_a -> bool) -> '_b -> '_a list -> '_a
所以这不是多态代码,正如我所希望的那样。
我读过它,我知道它为什么会发生,但我不知道如何在不重复代码的情况下解决它。这可能吗?为了避免遇到所谓的“值限制”,您需要做的就是确保您的声明在语法上定义了一个函数。在大多数情况下,您可以通过显式设置一个参数来轻松实现,如下所示:
let find g = find2 (fun _ -> true) g
为了避免遇到所谓的“值限制”,您需要做的就是确保您的声明在语法上定义了一个函数。在大多数情况下,您可以通过显式设置一个参数来轻松实现,如下所示:
let find g = find2 (fun _ -> true) g
它确实有效。我想我试过了,但我很可能忘记了代码中的其他地方。谢谢它确实有效。我想我试过了,但我很可能忘记了代码中的其他地方。谢谢