什么';OCaml中include、require和open的区别是什么?

什么';OCaml中include、require和open的区别是什么?,ocaml,Ocaml,比如说, 包括:包括Ppx\u核心 打开:opencore.Std require:#require“compiler libs.common” 并使用:#使用“topfind” 包括当前结构中模块的组件:您所在的模块将包含Ppx\u core中的所有定义 open在键入环境中创建模块的组件。您可以只键入element,而不是键入Core.Std.element #require是一个命令,用于查找并加载库,使其模块可供您访问 #使用表现得像是直接进入你的顶层 请注意,-关键字不是OCaml语

比如说,

包括:
包括Ppx\u核心

打开:
opencore.Std

require:
#require“compiler libs.common”

并使用:
#使用“topfind”

  • 包括当前结构中模块的组件:您所在的模块将包含
    Ppx\u core
    中的所有定义
  • open
    在键入环境中创建模块的组件。您可以只键入
    element
    ,而不是键入
    Core.Std.element
  • #require
    是一个命令,用于查找并加载库,使其模块可供您访问
  • #使用
    表现得像是直接进入你的顶层

请注意,
-关键字不是OCaml语言的一部分,而是顶级命令:如果您试图编译文件,它们将不起作用。

模块定义中的
include Module.Name
语句将包括名为
Module.Name
的模块中的所有定义。定义将大致包括在复制粘贴时。如果
include Module.Name
出现在模块类型定义(也称为签名定义)内部,则
Module.Name
应该是有效的(编译器已知的)模块类型。它将包括模块类型的定义(不包括任何类型共享约束)

模块实现和模块签名中出现的
open Module.Name
语句将允许您引用
Module.Name
的定义(值、类型、子模块),而无需使用完全限定名,即使用不带
Module.Name
前缀的短名称


#require
语句根本不是一个语句,也不是OCaml语法的一部分。它是OCaml顶层的特殊指令——交互式循环。与ipython一样,ipython也有自己的指令。
require
指令将加载指定的包及其所有依赖项。此外,该指令不是标准OCaml顶级发行版的一部分,而是由作为ocamlfind工具包一部分的
topfind
脚本添加的。
#use
指令用于加载和评估脚本。例如,
#使用“topfind”
将从OCaml标准库文件夹加载并评估
topfind
脚本。此脚本将注册
require
指令。还有
#load
#load#u rec
指令,它们在更精细的粒度级别上工作,而不是在包上工作——这些指令旨在加载库。

也许可以为每一个指令提供一个实践示例,使答案更加完整?