例如,
包括:include Ppx_core
打开:open Core.Std
要求:#require "compiler-libs.common"
并使用:#use "topfind"
答案 0 :(得分:7)
include
re-exports当前结构中模块的组件:您所在的模块将包含Ppx_core
中的所有定义。open
在输入环境中生成模块directly accessible的组件。您只需输入Core.Std.element
。element
#require
是一个Topfind命令,可以找到一个库并加载它,使您可以访问它的模块。#use
表现得好像copying a full file直接进入您的顶层。请注意,#
- 关键字不是OCaml语言的一部分,而是顶级命令:如果您尝试编译文件,它们将无法工作。
答案 1 :(得分:3)
模块定义中的include Module.Name
语句将包含名为Module.Name
的模块中的所有定义。这些定义将大致包含在复制粘贴中。如果include Module.Name
出现在模块类型定义(也称为签名定义)内,则Module.Name
应该是有效的(编译器已知)模块类型。它将包括模块类型的定义(不包括任何类型共享约束)。
模块实现和模块签名中发生的open Module.Name
语句将允许您在不使用完全限定名称的情况下引用Module.Name
的定义(值,类型,子模块),即使用没有Module.Name
前缀的短名称。
#require
语句根本不是声明,也不是OCaml语法的一部分。它是OCaml toplevel的特殊指令 - 交互式循环。与ipython一样有自己的指令。 require
指令将加载指定的包及其所有依赖项。此外,该指令不是标准OCaml顶级分发的一部分,而是由topfind
脚本添加,该脚本是ocamlfind工具包的一部分。 #use
指令用于加载和评估脚本。例如,#use "topfind"
将加载并评估OCaml标准库文件夹中的topfind
脚本。该脚本将注册require
指令。还有#load
和#load_rec
指令,它们在更精细的层次上工作,而不是包 - 这些指令用于加载库。