Sof*_*mur 2 ocaml naming-conventions
我想知道是否已经存在一些Ocaml的命名约定,特别是对于构造函数的名称,变量的名称,函数的名称以及记录标签的名称.
例如,如果我想定义一个类型condition,你建议显式地(例如Condition_None)声明它的构造函数,以便直接知道它是一个构造函数condition吗?
另外你如何命名这种类型的变量?c还是a_condition?我总是犹豫不决a,an或者the.
要声明一个函数,是否有必要给它一个名称,允许从其名称推断出参数的类型,例如remove_condition_from_list: condition -> condition list -> condition list?
另外,我在我的程序中使用了很多记录.如何命名记录以使其看起来与普通变量不同?
有很多方法可以命名,我希望找到一个有着良好品味的传统方法,坚持下去,这样我在命名之前就不需要思考了.这是一个公开的讨论,任何建议都将受到欢迎.谢谢!
您可能对Caml编程指南感兴趣.它们涵盖变量命名,但不回答您的确切问题.
关于构造函数命名空间:理论上,您应该能够将模块用作命名空间,而不是在构造函数名称中添加前缀.例如,您可以Constructor使用模块并使用它Constructor.None来避免与None该option类型的标准构造函数混淆.然后,您可以使用open或ocaml的3.12当地开语法,或使用模块走样module C = Constructor然后C.None有用的时候,要避免长时间的名称.
在实践中,人们仍倾向于使用短前缀,例如大写类型的第一个字母CNone,以避免在使用相同构造函数名称操作两个模块时出现任何混淆; 这经常发生,例如,当你编写一个编译器并且有几个传递操作具有相似类型的不同AST类型:after-parsing Letform,after-typing Letform等.
关于你的第二个问题,我赞成简洁.推理意味着类型信息在大多数情况下都是隐式的,您不需要在命名约定中强制使用显式注释.从上下文中可以明显看出 - 或者说不重要 - 操纵什么类型,例如.remove cond (l1 @ l2).如果您的remove值在Condition子模块中定义,那么它就没用了.
编辑:记录标签具有与总和类型构造函数相同的作用域行为.如果已{x: int; y : int}在Coord子模块中定义了记录,则可以访问foo.Coord.x模块外部的字段,或使用别名foo.C.x,或Coord.(foo.x)使用3.12的"本地打开"功能.这与sum构造函数基本相同.
在3.12之前,您必须在记录的每个字段上编写该模块,例如.{Coord.x = 2; Coord.y = 3}.从3.12开始,你可以只限定第一个字段:{Coord.x = 2; y = 3}.这也适用于模式位置.
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |