2

OCaml 提供mli了接口和模块系统。

我的问题很简单,如何从中选择?

4

2 回答 2

2

好吧,一方面,模块更强大。例如,OCaml 有 Functor(类似于模块级函数)。在解释器中输入:

module String_set = Set.Make (String)

它创建一个对字符串集(例如并集和交集)进行操作的模块。

如果您只使用模块的命名空间功能,则创建显式模块可以方便地使用更深的命名空间。也就是说,模块中的模块,例如:Module1.Module2,可以通过定义名为 Module2 的模块的文件 module1.ml 来实现。

当然,每个文件都定义了一个模块 - 文件 m.ml 定义了模块 M - 我发现它们在语法上很方便(因为你没有额外的缩进......)

此外,.mli 有不同的用途:接口文件用于记录顶级定义的类型,这包括模块本身。如果您在文件 m.ml 中定义模块 X,您也可以将 X 的签名放入 m.mli 中。但是 .mli 文件是可选的,因此即使您更喜欢将模块定义为文件,也不需要创建接口文件。

PS:OCaml 中的模块非常强大,以至于一个常见的话题是“我应该使用模块还是对象?” . 还要检查一流的模块是否增加了魔力。

于 2013-02-13T11:53:11.077 回答
1

这只是访问同一事物的两种方式

当您在文件 Bar.ml 中创建模块 Foo 时,您必须通过 Bar.Foo.function 访问它。如果您创建 bar.mli,则此文件中定义的所有函数都可以通过 Bar.function 在语法上访问。其他职能只是实习生。

于 2013-02-13T11:08:43.740 回答