是否可以在Ocaml中将不同类型存储在同一哈希表(Hashtbl)中?哈希表真的仅限于一种类型吗?

最佳答案

是的,哈希表条目仅限于每个表的一种类型。这实际上是关于OCaml类型系统的问题,而不是关于哈希表的问题。如果在哈希表中要求事物具有相同的类型似乎很奇怪,那么在列表中又如何呢?

在不知道您要解决的问题的情况下,很难知道要提出什么建议。但是,通常要做的是创建一个代数类型,该类型对于要处理的每种类型都有一个变体:

type alg = A of int | B of float

类型(字符串,alg)Hasttbl.t的值将使用字符串作为查找键来存储整数和浮点数。
# let ht = Hashtbl.create 44;;
val ht : ('_a, '_b) Hashtbl.t = <abstr>
# Hashtbl.add ht "yes" (A 3);;
- : unit = ()
# Hashtbl.add ht "no" (B 1.7);;
- : unit = ()
# ht;;
- : (string, alg) Hashtbl.t = <abstr>
# Hashtbl.find ht "yes";;
- : alg = A 3

在习惯了OCaml的灵活而强大的类型之后,如果没有它,就很难回到系统上来。

关于ocaml中的哈希表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8962895/

10-10 08:52