什么';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
指令,它们在更精细的粒度级别上工作,而不是在包上工作——这些指令旨在加载库。也许可以为每一个指令提供一个实践示例,使答案更加完整?