Ocaml 测试是否在utop中运行
我在我的Ocaml 测试是否在utop中运行,ocaml,prompt,utop,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 "# "; ]));; (我不理解那里发生的一切……我只是在网上找到了它并对其进行了调整。) 但是
.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 "# ";
]));;
(我不理解那里发生的一切……我只是在网上找到了它并对其进行了调整。)
但是现在,如果我使用常规的ocaml
toplevel,我会得到:
Error: Unbound module UTop
我是否可以在
.ocamlinit
中添加一个测试以跳过这些行,除非我正在运行utop?我可以把它们放在一个仅由utop加载的附加文件中吗?如果您添加#需要“utop”怎么办
?我看到了这个错误:异常:无效的参数“编译器libs中的ocamltoplevel.cma库不能加载到OCaml顶级中”
然后是文件.ocamlinit”,第1行:错误:引用未定义的全局线程
(我跳过了许多行,如/usr/local/lib/OCaml/unix.cma:loaded
)。这也是我的第一个猜测:)嗯,它在我这边起作用(像你一样更新了。ocamlinit)。我使用的是ocaml 4.04.0。@Tobia(1)一个解决方法(虽然不是很好)是将.ocamlinit
分为两个文件:一个用于utop,另一个用于标准顶级,例如为ocaml
创建一个别名,将-init
传递到原始顶级。@Tobia(2)原则上,我们可以在OCaml代码中测试Sys.executable\u name
,但是\require
和其他指令存在问题(这不是有效的OCaml代码)。理想情况下,utop将使用不同的init文件感谢OCaml——让我们称之为.utoprc——或者在加载.ocamlinit之前查找.utoprc。想要在两者中使用相同配置的人可以使用某种include命令从inside.utoprc运行另一个文件。