2013-03-13 76 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