我想比较两个哈希表的相等性:
open Core.Std
let hashtables_equal (x_tbl: ('a, 'b) Hashtbl.t) (y_tbl: ('a, 'b) Hashtbl.t) : bool =
(Hashtbl.length x_tbl = Hashtbl.length y_tbl)
&& Hashtbl.for_alli x_tbl ~f:(fun ~key ~data -> Hashtbl.existsi y_tbl ~f:(fun ~k ~d -> k = key && d = data))
f
和for_alli
中的existsi
函数有两个标记的参数~key
和~data
。
由于使用了不正确的标签,上面的代码无法编译。但是,我想在嵌套函数中引用~key
和~data
标记的参数。
我该怎么做?
答案 0 :(得分:0)
您可以为带标签的参数指定本地名称,您无需使用标签本身作为名称。
let hashtables_equal x_tbl y_tbl =
Hashtbl.length x_tbl = Hashtbl.length y_tbl &&
Hashtbl.for_alli x_tbl ~f: (fun ~key ~data ->
Hashtbl.existsi y_tbl ~f:(fun ~key:k ~data:d ->
k = key && d = data))
对于它的价值,Core中似乎有一个函数比较哈希表的相等性:
let hashtables_equal x_tbl y_tbl = Hashtbl.equal x_tbl y_tbl (=)
在这种情况下,最后一个参数(=)
用于比较元素,以防通常的比较不是您想要的。 (因为它不适用于哈希表,作为一个例子。)