我创建了一个这样的模块:
module Foo =
struct
class foo =
object(this)
...
end
let (><) (f1:foo) (f2:foo) = ...
end
之后我在另一个文件中打开了这个模块,并尝试使用operator&gt;&lt;,但ocamlc引发了一个错误:&#34;错误:未绑定的值&gt;&lt;&#34;,但在utop中操作员工作正常。
open Foo
let x = new Foo.foo;;
let y = new Foo.foo;;
let z = x >< y;;
也许这个问题与ocamlc的选项有关,我编译得像这样
ocamlfind ocamlc -linkpkg -thread -package core Foo.ml test.ml -o main
其中Foo.ml是包含模块Foo的文件,test.ml包含operator的使用。
那么,OCaml是否支持这种使用运算符的方式,或者我做错了什么?
答案 0 :(得分:3)
如果在名为Foo的文件中定义了名为Foo的模块,则内部模块的名称为Foo.Foo
。在OCaml中,文件的最外层形成一个以文件命名的模块。
你可以说include Foo.Foo
。或者,您可以从文件Foo
中删除模块Foo
包装。