Ключ хеш-таблицы в OCaml может иметь любой тип, который можно сравнить на равенство и можно хэшировать в целое число. «Ванильный» интерфейс использует встроенное полиморфное сравнение для сравнения на равенство и встроенную полиморфную хеш-функцию.
Встроенная функция полиморфного сравнения не работает для типов функций и для циклических значений.
Существует также функциональный интерфейс, который позволяет вам определять свои собственные функции равенства и хеш-функции. Таким образом, вы можете даже иметь хеш-таблицу с ключами, которые содержат функции, если вы проделаете небольшую дополнительную работу (при условии, что вы не ожидаете сравнить функции на равенство).
Нетрудно создать хеш-таблицу с кортежами в качестве ключей:
# let my_table = Hashtbl.create 64;;
val my_table : ('_weak1, '_weak2) Hashtbl.t = <abstr>
# Hashtbl.add my_table (1, 2) "one two";;
- : unit = ()
# Hashtbl.add my_table (3, 4) "three four";;
- : unit = ()
# Hashtbl.find my_table (1, 2);;
- : string = "one two"