2012-01-22 13 views
6

Czy możliwe jest przechowywanie różnych typów w tym samym hoście (Hashtbl) w Ocaml? Czy hashtables naprawdę są ograniczone tylko do jednego typu?Hashtables w ocaml

Odpowiedz

22

Tak, wpisy tabel mieszania są ograniczone do jednego typu dla każdej tabeli. To jest naprawdę pytanie o system typu OCaml, a nie o tabele mieszania. Jeśli wydaje się dziwne wymagać, aby rzeczy były tego samego typu w tabeli mieszania, to co powiesz na liście?

Bez znajomości problemu, który rozwiązujesz, trudno stwierdzić, co zasugerować. Jednak powszechną rzeczą do zrobienia jest, aby utworzyć algebraiczne typ, który ma jeden wariant dla każdego z typów masz do czynienia z:

type alg = A of int | B of float 

wartości typu (łańcuch, ALG) Hashtbl.t będzie przechowywać ints i unosi się, używając łańcucha jako klucza wyszukiwania.

# 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 

Po przyzwyczajeniu się do elastycznego i silnego pisania OCaml, trudno jest wrócić do systemów bez niego.