将默认参数作为默认参数传递给函数

Passing default parameters to functions as default parameters

我有一些带有默认参数的函数,例如

let h_foo a b = a * b
let foo ?(f_heuristic=h_foo) a b = f_heuristic a b

(* caller of foo where may want to change `f_heuristic` *)
let fn ?(f=foo) a b =
  f a b

fn 5 6                                            (* => 30 *)

但是,我希望能够使用包装函数默认值的不同默认值调用包装函数。我运行报了下面的错误,很迷惑,不知道怎么解决。

fn ~f:(fun a b -> a + b) 5 6
(* Line 1, characters 6-24:
 * Error: This function should have type
 *          ?f_heuristic:(int -> int -> int) -> int -> int -> int
 *        but its first argument is not labelled *)

这在 Ocaml 中可行吗,还是错误的方法? 谢谢S

试试这个:

let fn ?(f=(foo : int -> int -> int)) a b = f a b;;

问题是代码中可选参数 f 的类型被推断为具有可选参数的 foo 类型。通过将默认值更改为您想要的类型,您也可以为 fn 提供您想要的类型。