2012-01-22 17 views
6

Ocamlの同じハッシュテーブル(Hashtbl)に異なるタイプを格納することはできますか?ハッシュテーブルは本当に1つのタイプに制限されていますか?Ocamlのハッシュテーブル

答えて

22

はい、ハッシュテーブルのエントリは、各テーブルの1つのタイプに制限されています。これは実際にはOCaml型のシステムについての質問であり、ハッシュテーブルに関するものではありません。物事がハッシュテーブルで同じ型であることを要求することが奇妙に思える場合、リスト内ではどうですか?

あなたが解決している問題を知らずに、何を示唆するのかを知ることは難しいです。タイプの

type alg = A of int | B of float 

値(文字列、ALG)Hashtbl.tはint型を格納します。ただし、実行する一般的な事は、あなたが扱っている種類ごとに1つのバリアントを持っている代数型を作成することですルックアップキーとして文字列を使用して浮動小数点数を返します。

# 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の入力に慣れれば、それがないシステムに戻るのは難しいです。