12

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

言い換えれば、私は次のようなものが欲しいです:

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

これを機能させる方法はありますか、それともすべて間違っていますか?

4

2 に答える 2

13

モジュールレベルの条件はありませんが、これにはファーストクラスのモジュールを使用できます。

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 ...
于 2012-04-22T19:39:54.317 に答える
0

@Andreas のフォローアップとして、少なくとも最近の ocaml バージョンでは、次のように書くこともできます。

let (module M : MODEL) = match model with
  | "tree" -> (module TreeModel : MODEL)
  | "hash" -> (module HashModel : MODEL)
  | "list" -> (module ListModel : MODEL)
in ...
于 2017-12-05T16:40:29.770 に答える