Sono abbastanza nuovo con OCaml Module e non sono riuscito a utilizzare il mio modulo senza combinare sia un "include" che un "aperto". Ho provato a mettere la firma in un file .mli separato, senza successo.Modulo OCaml: include E aperto?
Qui di seguito ho indicato un minimo (non) esempio di lavoro, che sto cercando di compilare con
ocamlc -o main Robot.ml main.ml
Cosa devo fare per avere solo usare "aperto", oppure solo " includere ", ma non entrambi?
File "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
File "main.ml" (non funzionante):
open Robot;;
top();
File "main.ml" (di lavoro):
include Robot;;
open Robot;;
top();
Penso che tu abbia le risposte alle tue domande. Si consiglia inoltre di leggere su [unità di compilazione] (http://caml.inria.fr/pub/docs/manual-ocaml/manual020.html). Ma per favore, una volta che hai capito cosa fa "open". Non usarlo, rende più difficile la comprensione del tuo codice. –
Beh, di norma sarei d'accordo, ma in questo caso l'obiettivo è fornire una semplice "biblioteca di robot" per insegnare la programmazione di base ai principianti (in particolare, ma non solo, OCaml). Quindi preferirei evitare la sintassi Robot.top(), il più possibile. –
Beh, penso che in effetti sarebbe molto più sottostimabile per i principianti rendere esplicito l'oggetto su cui agiscono. Ad ogni modo potresti anche voler dare un'occhiata alla documentazione di [open] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd170) e [include] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd171). –