2012-04-22 34 views
10

クラスプロジェクトでは、同じ抽象データ構造の異なる実装のパフォーマンスを評価するプログラムを作成しています。私はそれぞれをテストするために同じコードを使用しているので、ユーザーの入力に応じてモジュールのエイリアスを設定し、そのモジュールをテストコードで実行することができます。条件付きモジュールエイリアシング

let module M = 
    if model = "tree" then TreeModel else 
    if model = "hash" then HashModel else 
    ListModel 
in ... 

私は、この作品を作ることができる方法があるか、私はこのすべて間違っについてつもりです:つまり

は、私のような何かをしたいですか?

答えて

11

は、モジュールレベルには何の条件文はありませんが、あなたは、このためにファーストクラスのモジュールを使用することができます少なくともあなたも書くことができ、最近のOCamlのバージョンで@Andreasへのフォローアップとして、

let m = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in let module M = (val m : MODEL) 
in ... 
+0

ありがとう、これは私が探していたものです! –

0

let (module M : MODEL) = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in ... 
+0

この形式では、すべてのマッチブランチにモジュールタイプ情報を書く必要はありません。 '(モジュールM:MODEL)'で十分であり、伝播します。 – lavi