F#中是否有自标识符的标准命名约定?

时间:2013-03-13 07:02:41

标签: f# naming-conventions this self

关于F#self-identifier's,如:

type MyClass2 =
   let data = 123

   member whateverYouWant.PrintMessage() =
       printf "MyClass2 with Data %d" data

F# class documentation说:

  

与其他.NET语言不同,您可以命名自我标识符   随你怎么便;你不仅限于自我,我或者自己的名字   此

(问题What are the benefits of such flexible "self-identifiers" in F#?的答案解释了这可能有用。)

我的问题是,是否有一个非官方的标准来命名自我标识符?也就是说,虽然可能没有规定性约定,但是对于F#程序员在野外做什么有描述性约定吗? thisxself

更新

看起来这可能会被关闭,但另一个问题的答案几乎不是答案,因为它只显示了我已经知道的多个选项。我正在寻求共识。此外,这个问题在2009年被问到,当时可能没有达成共识,而现在可能有一个。

同样有趣的是Don Syme撰写的书Expert F# 3.0在示例中没有使用一致的自我标识符。相反,它似乎偏爱单字母自我标识符,尤其是字母x

3 个答案:

答案 0 :(得分:7)

type MyClass2 as self =
   let data = 123

   let privatePrintMessage() = self.PrintMessage()

   member this.PrintMessage() =
       printf "MyClass2 with Data %d" data

有些人使用member x.Name,但这是错误的,因为x没有解释它是什么,而对于F#中最常用的名称之一 - 自我标识符应该是不言自明的!< / p>

当不需要自我标识符时,有些人还会选择编写member __.Name。这些人通常是确保没有未使用的标识符的人(使用--warnon:1182容易)。其他人说这很奇怪或者导致不一致 - 选择你喜欢的东西。

答案 1 :(得分:3)

有几个选项 - 人们经常会写thisselfx。我认为x可能是最不具描述性的,但它经常被使用 - 也许这是错误的!另一个不错的选择是使用引用类名称的标识符(例如personpoint),因为这是非常有用的信息。

type Point(x:float, y:float) =
  member point.X = x
  member point.Y = y

但我同意当你实际上没有使用自引用时感觉有点多余。所以使用__会有意义。我认为你不能只使用普通(单一)_,这有点不幸。

因此,总而言之,可能没有单一的推荐标准 - 但有一些常见的模式。

答案 2 :(得分:1)

一个不同的答案(如果你愿意的话):

不,自我标识符没有标准的命名约定。您应该为每个项目选择一个,并执行它。