Soy bastante nuevo con OCaml Module y no he podido utilizar mi propio módulo sin combinar tanto un "incluir" como un "abrir". He intentado poner la firma en un archivo .mli separado, sin éxito.OCaml Module: incluir AND open?
A continuación me indicaron un mínimo (no) ejemplo de trabajo, que estoy tratando de compilar con
ocamlc -o main Robot.ml main.ml
Lo que tengo que hacer sólo para tener que usar "abrir" o sólo " incluir ", pero no ambos?
Archivo "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
Archivo "main.ml" (no funciona):
open Robot;;
top();
Archivo "main.ml" (de trabajo):
include Robot;;
open Robot;;
top();
Creo que tiene respuestas a sus preguntas. También es posible que desee leer sobre [unidades de compilación] (http://caml.inria.fr/pub/docs/manual-ocaml/manual020.html). Pero por favor una vez que haya entendido lo que 'abierto 'hace. No lo use, hace que sea mucho más difícil entender su código. –
Bueno, normalmente estaría de acuerdo, pero en ese caso el objetivo es proporcionar una simple "biblioteca de robots" para enseñar programación básica a principiantes (en particular, pero sin limitarse a OCaml). Así que preferiría evitar la sintaxis de Robot.top(), tanto como sea posible. –
Bueno, creo que realmente haría que fuera mucho más fácil de entender para los principiantes renderizar explícitamente el objeto sobre el que actúan. De todos modos, es posible que desee echar un vistazo a la documentación de [abrir] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd170) y [incluir] (http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#@manual.kwd171). –