Ocaml: неизвестная директива `require'
При загрузке OCaml, я получаю это сообщение при загрузке ocaml в терминале:
ocaml
OCaml version 4.07.1
Unknown directive `require'.
В чем именно проблема?
Я ранее изменил свой файл ocamlinit, потому что у меня были некоторые проблемы. Теперь он содержит:
(* ## added by OPAM user-setup for ocamltop / base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *)
(* Added by OPAM. *)
let () = try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
with Not_found -> ()
;;
#require "yojson";;
#use "topfind";;
#camlp4o
#thread;;
Topfind.don't_load ["compiler-libs.toplevel"];;
#require "core.top";;
#require "core.syntax";;
(* ## end of OPAM user-setup addition for ocamltop / base ## keep this line *)
Редактировать:
Я посмотрел на этот вопрос до того, как командная строка ocaml не может найти "topfind", однако я не нашел его полезным, поскольку нигде в ответах не было указано, что вам нужно запустить eval $(opam config env)
каждый раз, прежде чем открыть ocaml, как кто-то ниже сообщил мне. Поэтому я думаю, что разъяснения этого человека полезно иметь на этом сайте для других людей.
1 ответ
Вы должны поставить #use "topfind"
перед любым #require
директивы. Так ставь #require "yojson";;
до конца .ocamlinit
файл (также это хорошая идея, чтобы добавить его после комментария).
#require
Директива предоставляется ocamlfind
инструмент через topfind
скрипт, который загружается в верхний уровень через #use
директива, которая является стандартной встроенной директивой для загрузки файлов. topfind
файл инициализирует ocamlfind
система на верхнем уровне, так что верхний уровень теперь может получить доступ к ocamlfind
инфраструктура и загрузка библиотек, установленных в системе. Если вы используете opam для установки пакетов, то не забудьте сделать eval $(opam config env)
(или более короткая версия, доступная в opam 2.x eval $(opam env)
) в вашем терминале, прежде чем начинать уровень. Например,
eval $(opam config env)
ocaml
и вот правильное содержание .ocamlinit
файл:
(* ## added by OPAM user-setup for ocamltop / base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *)
(* Added by OPAM. *)
let () = try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
with Not_found -> ()
;;
#use "topfind";;
#camlp4o
#thread;;
Topfind.don't_load ["compiler-libs.toplevel"];;
#require "core.top";;
#require "core.syntax";;
(* ## end of OPAM user-setup addition for ocamltop / base ## keep this line *)
#require "yojson";;