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 回答