Hashtables в окамль - PullRequest
       25

Hashtables в окамль

7 голосов
/ 22 января 2012

Можно ли хранить разные типы в одной и той же хеш-таблице (Hashtbl) в Ocaml? Действительно ли хеш-таблицы ограничены одним типом?

1 Ответ

23 голосов
/ 22 января 2012

Да, записи хеш-таблиц ограничены одним типом для каждой таблицы.Это действительно вопрос о системе типа OCaml, а не о хеш-таблицах.Если вам кажется странным требовать, чтобы в хеш-таблице вещи были одного типа, как в списке?

Не зная проблемы, которую вы решаете, трудно понять, что предложить.Тем не менее, обычным делом является создание алгебраического типа, который имеет один вариант для каждого из типов, с которыми вы имеете дело:

type alg = A of int | B of float

Значение типа (string, 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, трудно вернуться к системам без него.

...