OCaml的运营商

时间:2015-08-27 15:33:44

标签: operators ocaml

我创建了一个这样的模块:

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是否支持这种使用运算符的方式,或者我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果在名为Foo的文件中定义了名为Foo的模块,则内部模块的名称为Foo.Foo。在OCaml中,文件的最外层形成一个以文件命名的模块。

你可以说include Foo.Foo。或者,您可以从文件Foo中删除模块Foo包装。