Я довольно новичок в модуле OCaml, и мне не удалось использовать свой собственный модуль, не объединяя «включительно» и «открытую». Я попытался поставить подпись в отдельный файл .mli без успеха.OCaml Module: include AND open?
Ниже я указал минимум (не) работает пример, что я пытаюсь компилировать с
ocamlc -o main Robot.ml main.ml
Что мне нужно сделать, чтобы только использовать «открыть» или только " включают ", но не оба из них?
Файл "Robot.ml":
module type RobotSignature =
sig
val top: unit -> unit
end
module Robot =
struct
let top() =
begin
Printf.printf "top\n"
end
(* Should not be visible from the 'main' *)
let dummy() =
begin
Printf.printf "dummy\n"
end
end
Файл "main.ml" (не работает):
open Robot;;
top();
Файл "main.ml" (рабочий):
include Robot;;
open Robot;;
top();
Я думаю, у вас есть ответы на ваши вопросы. Вы также можете прочитать о [единицах компиляции] (http://caml.inria.fr/pub/docs/manual-ocaml/manual020.html). Но, пожалуйста, как только вы поняли, что делает 'open'. Не используйте его, это затрудняет понимание вашего кода. –
Хорошо бы я согласился, но в этом случае цель состоит в том, чтобы предоставить простую «библиотеку роботов» для обучения базовому программированию новичкам (в частности, но не ограничиваясь OCaml). Поэтому я предпочитаю избегать синтаксиса Robot.top(), насколько это возможно. –
Ну, я думаю, что это на самом деле сделает его более понятным для новичков, чтобы отобразить объект, который они действуют на явном. В любом случае, вы также можете посмотреть документацию по [open] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd170) и [включить] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd171). –