我有许多带有默认参数的函数,例如。
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中这是可能的吗,或者这是错误的方法?谢谢
发布于 2019-12-19 05:41:57
试试这个:
let fn ?(f=(foo : int -> int -> int)) a b = f a b;;问题是代码中可选参数f的类型被推断为具有可选参数的foo的类型。通过将默认值更改为您想要的类型,您也可以为fn提供您想要的类型。
https://stackoverflow.com/questions/59398992
复制相似问题