【发布时间】:2015-01-26 04:00:14
【问题描述】:
我最近在OCaml模式匹配上犯了一个错误,基本思路如下:
utop # module X = struct let x = 10 end;;
module X : sig val x : int end
utop # match 10 with
| X.x -> x
| _ -> 0;;
Error: Parse error: [module_longident] expected after "." (in [module_longident])
现在,回想起来我知道我犯的错误:如果模式匹配,模式中使用的变量名将被绑定。即使它们是,它们也不会用作匹配的常量。
但是,错误消息完全让我失望。如果我不使用 x 作为模块的一部分,我会得到一个更容易理解的消息:
utop # let x = 20;;
val x : int = 20
utop # match 10 with
| x -> x
| _ -> 0;;
Characters 26-27:
Warning 11: this match case is unused.
- : int = 10
在第二个示例中,我理解错误消息:| x -> 将匹配所有内容,因此 | _ -> 是多余的,所以我记得我错误地使用了模式匹配。
我的问题是:有人可以向我解释第一个示例的错误消息吗?
【问题讨论】: