OCaml 类型声明和大写字母
OCaml type declaration and capital letters
在 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 完美配合。这种行为有充分的理由吗?我没有在网上找到任何东西。
传统上,FP 语言将大写标识符的使用限制在某些情况下。这使代码更具可读性,并且实际上强制执行了某种编码风格。它还使解析更容易(我假设),因为传统上 FP 语言不仅具有丰富的表达式子语言,而且还具有丰富的类型子语言。
因此,您不能在 OCaml 中为记录的字段使用大写名称。
要在文档中找到它,您可以从 Section 6.8, then observe that a field-name is a lowercase-ident in Section 6.3 中记录语法的定义开始。
这是有原因的。 OCaml 使用许多不同的命名空间,但在某些情况下,其中两个需要区分。然后,这是通过其中一个纯大写字母和另一个纯小写字母来完成的。在手头的例子中,考虑表达式 a.b.c
和 a.B.c
。前者是记录的字段 c,后者又是记录 a 的字段。后者是记录a的一个字段c,但是(各自的记录类型定义和)字段名c来自模块B。
如果 OCaml 允许使用混合大小写的记录名称,则这两个表达式在语法上无法区分,因此点运算符不能同时用于记录字段和模块部分。然后,将需要两个不同的运算符,使语法更加繁琐。
在 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 完美配合。这种行为有充分的理由吗?我没有在网上找到任何东西。
传统上,FP 语言将大写标识符的使用限制在某些情况下。这使代码更具可读性,并且实际上强制执行了某种编码风格。它还使解析更容易(我假设),因为传统上 FP 语言不仅具有丰富的表达式子语言,而且还具有丰富的类型子语言。
因此,您不能在 OCaml 中为记录的字段使用大写名称。
要在文档中找到它,您可以从 Section 6.8, then observe that a field-name is a lowercase-ident in Section 6.3 中记录语法的定义开始。
这是有原因的。 OCaml 使用许多不同的命名空间,但在某些情况下,其中两个需要区分。然后,这是通过其中一个纯大写字母和另一个纯小写字母来完成的。在手头的例子中,考虑表达式 a.b.c
和 a.B.c
。前者是记录的字段 c,后者又是记录 a 的字段。后者是记录a的一个字段c,但是(各自的记录类型定义和)字段名c来自模块B。
如果 OCaml 允许使用混合大小写的记录名称,则这两个表达式在语法上无法区分,因此点运算符不能同时用于记录字段和模块部分。然后,将需要两个不同的运算符,使语法更加繁琐。