在Windows环境中使用ocamlc:
type splitter = {varname:string; count:int; mean:float}
在我编译源代码时工作正常,但是:
type splitter = {Varname:string; count:int; mean:float}
导致编译器抱怨(没有提供太多信息)
File "splitter.ml", line 1, characters 17-24:
Error: Syntax error
与此同时,第二条线与OCaml完美配合。这种行为有充分的理由吗?我没有在网上找到任何东西。
答案 0 :(得分:4)
传统上,FP语言限制了对某些情况使用大写标识符。这使代码更具可读性,并且实际上强制执行某种编码风格。鉴于FP语言传统上不仅具有丰富的表达子语言,而且还具有丰富的类型子语言,它还使解析更容易(我会假设)。
因此,您无法在OCaml中为记录字段使用大写名称。
要在文档中找到这一点,您可以从Section 6.8中的记录语法定义开始,然后观察字段名称是 lowercase-ident in Section 6.3。
答案 1 :(得分:2)
有一个原因。 OCaml使用许多不同的命名空间,但在某些情况下,其中两个需要可区分。然后,其中一个是纯粹的大写,另一个纯粹是小写。在这种情况下,请考虑表达式a.b.c
和a.B.c
。前者是记录的字段c,而记录又是记录字段a。后者是记录a的字段c,但(相应记录类型定义和)字段名称c来自模块B.
如果OCaml允许使用混合大小写记录名称,则无法在语法上区分这两个表达式,因此点运算符不能同时用于记录字段和模块部分。然后,需要两个不同的运算符,使语法更加麻烦。