2012-01-22 17 views
6

¿Es posible almacenar diferentes tipos en la misma tabla hash (Hashtbl) en Ocaml? ¿Las tablas hash están realmente restringidas a un solo tipo?Hashtables en ocaml

Respuesta

22

Sí, las entradas de tablas hash están restringidas a un tipo para cada tabla. Esta es realmente una pregunta sobre el sistema de tipo OCaml y no sobre las tablas hash. Si parece extraño exigir que las cosas sean del mismo tipo en una tabla hash, ¿qué tal en una lista?

Sin saber el problema que está resolviendo, es difícil saber qué sugerir. Sin embargo, una cosa común que hacer es crear un tipo algebraica que tiene una variante para cada uno de los tipos que está tratando con:

type alg = A of int | B of float 

Valor de tipo (cadena, ALG) Hashtbl.t almacenaría enteros y flota, usando una cadena como la clave de búsqueda.

# 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 

Después de acostumbrarse a la escritura flexible y fuerte de OCaml, es difícil volver a los sistemas sin ella.