作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 OCaml 模块还很陌生,如果不结合“包含”和“打开”,我就无法使用自己的模块。
我试图将签名放在单独的 .mli 文件中,但没有成功。
下面我指出了一个最小(非)工作示例,我正在尝试使用它进行编译
ocamlc -o main Robot.ml main.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
open Robot;;
top();
include Robot;;
open Robot;;
top();
最佳答案
你有两个级别的机器人。由于您在文件 robot.ml 中明确调用了模块“Robot”,因此您需要打开 Robot,然后调用 Robot.top()。 robots.ml 文件中的任何内容都已隐式放入 Robot 模块中。
您可以去掉 robots.ml 中额外的“模块机器人”声明。
robots.ml 将变为:
module type RobotSignature =
sig
val top: unit -> unit
end
let top () =
begin
Printf.printf "top\n"
end
let top () =
begin
Printf.printf "top\n"
end
let helper () =
Printf.printf "helper\n"
val top: unit -> unit
open Robot;;
top();
(* helper will not be visible here and you'll get a compile error*)
helper ()
$ ocamlc -o main robot.mli robot.ml main.ml
File "main.ml", line 4, characters 0-6:
Error: Unbound value helper
关于module - OCaml 模块 : include AND open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997822/
我是一名优秀的程序员,十分优秀!