Ocaml: неизвестная директива `require ' - PullRequest
0 голосов
/ 13 февраля 2019

При загрузке 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 Ответ

0 голосов
/ 14 февраля 2019

Вы должны поставить #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";;
...