2013-03-13 41 views
7

关于F#的自我标识的,如:F#中的自标识符是否有标准的命名约定?

type MyClass2 = 
    let data = 123 

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

F# class documentation说:

不像其他.NET语言,你可以,但是你想命名的自我标识 ;你不限于自我,Me或 这个名字。

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

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

更新

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

另外有意思的是,由Don Syme撰写的书Expert F# 3.0不在示例中使用一致的自我标识符。相反,它似乎赞成单个字母的自我标识符,特别是字母x

+0

'这个'可能是最熟悉的。 – Daniel 2013-03-13 14:01:40

回答

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)。其他人认为这很奇怪,或者导致不一致 - 选择你喜欢的东西。

+3

这基本上是我采用的方法 - 当我不需要标识符时使用'__。Foo',而当我这样做时使用'this.Foo'。 – 2013-03-13 14:03:21

1

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

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

3

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

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

但我同意,当你没有真正使用自引用时,感觉有点多余。所以使用__会很有意义。我认为你不能仅仅使用普通的(单个)_有点不幸。

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

+0

我已经打开了一个允许wildard自标识符的[UserVoice问题](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3745318-allow-wildcard-self-identifiers)。 – Daniel 2013-03-14 14:45:24

+0

你发现自己最常使用的是什么? – User 2013-03-15 01:41:19

+1

@User Tomas曾在他的“真实世界FP”书中多次使用'x.'。我在近期的“F#Deep Dives”早期草稿中看到过'x.'和'this.'。 – 2013-03-18 11:23:50