F#是否有“官方”命名/套管约定?
我总是怀疑是否使用C#风格:
Class.MyFunctionName or Module.my_function_name
在F#中,你的意思是混合使用BCL类和F#库:它们有不同的外壳,代码看起来非常难看。
答案 0 :(得分:20)
是的,存在混淆,因为多年来F#已经从OCaml转变为.Net。基本上,命名约定是“重大变化” - 旧代码与新代码不一致。
然而,2009年5月的CTP解决了这个问题。
Release Notes说......
标准库命名约定
F#库采用的命名约定如下:
所有.NET和F#OO代码都根据现有的.NET指南使用PascalCase
F#函数编程运算符(如List.map)用于F#内部实现代码。这种代码使用camelCase作为运营商名称
不应使用下划线。
所以,你的问题......
Class.MyFunctionName or Module.my_function_name
答案是
Class.MyFunctionName和Module.MyFunctionName
(应用上述规则1)。
通过与F#编程运算符(例如List.averageBy)的比较仍然存在一些混淆,但生产F#代码应该使用CamelCase,因此看起来像其他人的.Net代码。如有疑问,请查看sample code以获取CTP。
(我个人喜欢_the_caml_style,但我必须GetOverThat)
答案 1 :(得分:3)
任何官方消息:我认为“还不完全”,但每当VS 2010达到Beta1时,您可能会看到F#库的近乎最终形式,并且会有一些相对于CTP的重命名。鉴于其历史,F#可能总是比它的旧兄弟更加精神分裂。
答案 2 :(得分:2)
我认为自当前接受答案以来,答案可能已经改变。
今天F# Style Guide说:
使用PascalCase进行类型声明,成员和标签
类,接口,结构,枚举,委托,记录和 受歧视的工会都应使用PascalCase命名。会员 在记录和歧视工会的类型和标签内应 也可以使用PascalCase。
type IMyInterface = abstract Something: int type MyClass() = member this.MyMethod(x, y) = x + y type MyRecord = { IntVal: int; StringVal: string } type SchoolPerson = | Professor | Student | Advisor | Administrator
和
使用camelCase进行模块绑定的公共功能
当模块绑定函数是公共API的一部分时,应使用 camelCase:F#
module MyAPI = let publicFunctionOne param1 param2 param2 = ... let publicFunctionTwo param1 param2 param3 = ...
因此,基于这些,我的回答是:
Class.MyFunctionName
Module.my_function_name
应该这样写:
Class.MyFunctionName
Module.myFunctionName
答案 3 :(得分:1)
从hubfs.com和其他来源看到的,它来自.net和OCaml。
我希望他们切换到任何一个并没有两个不同的约定,并且是微软我相信他们会采用点网风格。
答案 4 :(得分:1)
我的理解和当前用法是模块/静态函数具有小写,而“实例”函数具有大写。
编辑不是这个问题的答案,但相关:Don Syme的F# Formatting conventions
答案 5 :(得分:0)
不确定是否有任何真正的解决方案。似乎OCaml-ish代码可能会保留一些命名,即小写模块方法,而OO成员将采用.NET风格。