私はOCaml Moduleでかなり新しく、 "include"と "open"の両方を組み合わせずに独自のモジュールを使用することはできませんでした。 署名を別の.mliファイルに入れようとしましたが、成功しませんでした。 I以下OCamlモジュール:包含して開きますか?
私は唯一の「開く」を使用する必要があり、あるいはのみ "を行うために必要なものを私は
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)も参照してください。しかし、一度あなたは 'オープン'が何を理解してください。それを使用しないでください。コードを理解するのが難しくなります。 –
私は通常は同意しますが、その場合、初心者(特にOCamlに限定されません)に基本プログラミングを教えるための簡単な「ロボットライブラリ」を提供することが目的です。だから私は可能な限りRobot.top()構文を避けることを好むでしょう。 –
初心者が実際に演じているオブジェクトを明示的に表現することは、実際にはそれをはるかに過小評価すると思います。とにかく[open](http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd170)と[include]のドキュメントを見たいかもしれません。 http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd171)。 –