8

关于 F# 自标识符,如下所示:

type MyClass2 =
   let data = 123

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

F# 类文档说:

与其他 .NET 语言不同,您可以随意命名自我标识符;你不限于诸如self、Me或this之类的名字。

(对 F# 中这种灵活的“自我标识符”有什么好处?这个问题的答案解释了这个问题的可能用处。)

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

更新

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

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

4

3 回答 3

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# 中最常用的名称之一 - 自我标识符应该是不言自明的!

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

于 2013-03-13T07:11:47.447 回答
3

有几个选项——人们经常写thisor selfor x。我认为x可能是最不具描述性的一个,但它经常被使用——也许这是一个错误的事情!另一个不错的选择是使用一个标识符来引用类的名称(例如,personpoint),因为它提供了很多信息。

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

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

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

于 2013-03-14T09:04:50.233 回答
1

一个不同的答案(如果你喜欢的话):

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

于 2013-03-13T20:17:46.257 回答