测试是否在utop中运行

Tob*_*bia 5 ocaml prompt utop

我已经添加了几行代码来.ocamlinit使utop提示减少一个眼睛:

#require "react";;
#require "lambda-term";;
UTop.prompt := fst (React.S.create LTerm_text.(eval [
    S "\n";
    B_bold true;
    B_fg (LTerm_style.cyan);
    S "# ";
]));;
Run Code Online (Sandbox Code Playgroud)

(我不明白那里发生的一切......我刚发现它在网上发布并进行了调整.)

但是现在如果我使用常规的ocaml顶级我得到:

Error: Unbound module UTop
Run Code Online (Sandbox Code Playgroud)

.ocamlinit除非我正在运行utop,否则我可以添加测试以跳过这些行吗?我可以将它们放在仅由utop加载的附加文件中吗?

Pie*_* G. 1

如果添加呢#require "utop";;

  • @Tobia(1)一种解决方法(虽然不是很好)是将`.ocamlinit`分为两个文件:一个用于utop,另一个用于标准顶层,例如为`ocaml`创建一个别名,传递`-init <path -to-ocamlinit-with-no-utop>` 到原始顶层。 (2认同)
  • @Tobia (2) 原则上我们可以在 OCaml 代码中测试 `Sys.executable_name`,但是 `#require` 和其他指令存在问题(这不是有效的 OCaml 代码)。 (2认同)
  • 理想情况下,utop 将使用不同的初始化文件(感谢 ocaml)——我们称之为 .utoprc——或者在加载 .ocamlinit 之前查找 .utoprc。想要在两者中使用相同配置的人可以使用类似的 include 命令从 .utoprc 内部运行另一个文件。 (2认同)