对于一个类项目,我正在编写一个程序来评估同一抽象数据结构的不同实现的性能。 由于我使用相同的代码来测试它们中的每一个,我希望能够根据用户输入设置模块别名,并通过测试代码运行该模块。
换句话说,我想要这样的东西:
let module M =
if model = "tree" then TreeModel else
if model = "hash" then HashModel else
ListModel
in ...
有没有办法让我完成这项工作,还是我做错了?
模块级别没有条件,但您可以使用一流的模块:
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 ...
作为@Andreas的后续,至少在最近的 ocaml 版本中,您还可以编写:
let (module M : MODEL) = match model with
| "tree" -> (module TreeModel : MODEL)
| "hash" -> (module HashModel : MODEL)
| "list" -> (module ListModel : MODEL)
in ...