【发布时间】:2017-03-06 17:28:43
【问题描述】:
例如,
包括:include Ppx_core
打开:open Core.Std
要求:#require "compiler-libs.common"
并使用:#use "topfind"
【问题讨论】:
标签: ocaml
例如,
包括:include Ppx_core
打开:open Core.Std
要求:#require "compiler-libs.common"
并使用:#use "topfind"
【问题讨论】:
标签: ocaml
includere-exports当前结构中模块的组件:您所在的模块将包含Ppx_core中的所有定义。open 在打字环境中制作模块 directly accessible 的组件。您可以直接输入element,而不是输入Core.Std.element。#require 是一个 Topfind 命令,用于查找库并加载它,使其模块可供您访问。#use 的行为就像 copying a full file 直接进入您的顶层一样。请注意,#-关键字不是 OCaml 语言的一部分,而是顶级命令:如果您尝试编译文件,它们将不起作用。
【讨论】:
模块定义中的include Module.Name 语句将包括来自名为Module.Name 的模块的所有定义。定义将在复制粘贴时大致包含在内。如果include Module.Name 出现在模块类型定义(又名签名定义)内部,则Module.Name 应该是有效的(编译器已知的)模块类型。它将包括模块类型的定义(不包括任何类型共享约束)。
在模块实现和模块签名中出现的open Module.Name 语句将允许您在不使用完全限定名称的情况下引用Module.Name 的定义(值、类型、子模块),即使用不带Module.Name 前缀。
#require 语句根本不是语句,也不是 OCaml 语法的一部分。它是 OCaml 顶层的特殊指令 - 交互式循环。与 ipython 一样有自己的指令。 require 指令将加载指定的包及其所有依赖项。此外,该指令不是标准 OCaml 顶级发行版的一部分,而是由作为 ocamlfind 工具包一部分的 topfind 脚本添加的。 #use 指令用于加载和评估脚本。例如,#use "topfind" 将从 OCaml 标准库文件夹中加载和评估 topfind 脚本。该脚本将注册require 指令。还有#load 和#load_rec 指令,它们在更细粒度的级别上工作,而不是包——这些指令旨在加载库。
【讨论】: