我的代码在从文件运行时出错,但在粘贴到Ocaml repl时运行正常。我已将以下内容保存为test.ml:
module StringSet = Set.Make(String)
let words = StringSet.add StringSet.empty "something";;
当使用“ocaml test.ml”从bash运行时,我得到:
File "test.ml", line 3, characters 26-41:
Error: This expression has type StringSet.t = Set.Make(String).t
but an expression was expected of type StringSet.elt = string
当粘贴到Ocaml repl中时,我得到:
# module StringSet = Set.Make(String)
let words = StringSet.add StringSet.empty "something";;
module StringSet :
sig
(* ... much more output ... *)
end
val words : StringSet.t = <abstr>
#
从repl看,一切似乎都很好。 我的Ocaml版本由repl报告为:OCaml版本4.02.1。
有没有人知道为什么在运行“ocaml test.ml”时会产生错误?
答案 0 :(得分:0)
StringSet.add
函数将元素(字符串)作为第一个参数,将集合(StringSet.empty
)作为第二个参数。你有相反的顺序。
当我尝试你的代码时,我在两种情况下都会遇到同样的错误。当我反转参数顺序时,我不会在任何一种情况下都出错。
我正在使用OCaml 4.06.0,但我真的怀疑参数顺序已经改变。