2012-01-22 61 views
6

是否可以在Ocaml的同一哈希表中存儲不同的類型(Hashtbl)?哈希表是否僅限於一種類型?ocaml中的哈希表

回答

22

是的,散列表條目限制爲每個表的一種類型。這實際上是關於OCaml類型系統的問題,而不是哈希表。如果要求事物在散列表中是相同的類型似乎很奇怪,那麼在列表中如何?

不知道你正在解決的問題,很難知道建議。然而,做一個普通的事情是創建一個爲每種你處理的類型中的一種變型的代數類型:

type alg = A of int | B of float 

類型的值(字符串,ALG)Hashtbl.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中的靈活和強大的打字後,很難再回到系統離不開它。