2012-01-22 5 views
6

È possibile memorizzare diversi tipi nella stessa tabella hash (Hashtbl) in Ocaml? Gli hashtables sono veramente limitati a un solo tipo?Hashtables in ocaml

risposta

22

Sì, le voci delle tabelle hash sono limitate a un tipo per ogni tabella. Questa è davvero una domanda sul sistema di tipo OCaml e non sulle tabelle hash. Se sembra strano richiedere che le cose siano dello stesso tipo in una tabella hash, che ne dici di una lista?

Senza sapere il problema che stai risolvendo, è difficile sapere cosa suggerire. Tuttavia, una cosa comune da fare è creare un tipo algebrico che ha una variante per ciascun tipo hai a che fare con:

type alg = A of int | B of float 

Un valore di tipo (stringa, ALG) Hashtbl.t avrebbe memorizzare interi e fluttua, usando una stringa come chiave di ricerca.

# 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 

Dopo ci si abitua alla tipizzazione flessibile e forte di OCaml, è difficile tornare a sistemi senza di essa.