2012-01-22 22 views
6

Farklı tipler Ocaml'de aynı hashtable (Hashtbl) saklamak mümkün mü? Hasarlar gerçekten sadece bir türle sınırlı mı?Ocaml hashkolleri

cevap

22

Evet, karma tablo girişleri her tablo için bir türle sınırlıdır. Bu gerçekten OCaml tipi sistem hakkında bir soru ve karma tablolar hakkında değil. Bir şeylerin karma tablosunda aynı türde olmasını istemek garip görünüyorsa, bir listede ne var?

Çözmekte olduğunuz sorunu bilmeden, önerilerinizi bilmek zor. Çeşidi

type alg = A of int | B of float 

bir değere (dize, alg) Hashtbl.t int'leri saklamak olacaktır: Ancak, yapılacak ortak şey uğraşıyoruz türlerinin her biri için bir varyantını olan bir cebirsel türünü oluşturmaktır ve arama anahtarı olarak bir dize kullanarak yüzer.

# 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'ın esnek ve güçlü yazımına alıştıktan sonra, onsuz sistemlere geri dönmek zordur.