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

它确实有效。我想我试过了,但我很可能忘记了代码中的其他地方。谢谢它确实有效。我想我试过了,但我很可能忘记了代码中的其他地方。谢谢