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";;
Другие вопросы по тегам