OCaml 中的运算符
Operators in OCaml
我创建了一个这样的模块:
module Foo =
struct
class foo =
object(this)
...
end
let (><) (f1:foo) (f2:foo) = ...
end
之后我在另一个文件中打开这个模块并尝试使用运算符 ><,但是 ocamlc 抛出了一个错误:"Error: Unbound value ><",但是在 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 包含运算符的用法。
那么,OCaml 是否支持这种使用运算符的方式,还是我做错了什么?
如果在名为 Foo 的文件中定义了名为 Foo 的模块,则内部模块的名称为 Foo.Foo
。在 OCaml 中,文件的最外层形成一个以文件命名的模块。
你可以说include Foo.Foo
。或者您可以从文件 Foo
.
中删除模块 Foo
包装器
我创建了一个这样的模块:
module Foo =
struct
class foo =
object(this)
...
end
let (><) (f1:foo) (f2:foo) = ...
end
之后我在另一个文件中打开这个模块并尝试使用运算符 ><,但是 ocamlc 抛出了一个错误:"Error: Unbound value ><",但是在 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 包含运算符的用法。
那么,OCaml 是否支持这种使用运算符的方式,还是我做错了什么?
如果在名为 Foo 的文件中定义了名为 Foo 的模块,则内部模块的名称为 Foo.Foo
。在 OCaml 中,文件的最外层形成一个以文件命名的模块。
你可以说include Foo.Foo
。或者您可以从文件 Foo
.
Foo
包装器