2012-04-16 109 views

回答

14

沒有區別,是的,即使在聲明後它們也可以互換使用。

但是千萬注意F# Component Design Guidelines建議(第4.2節):

考慮優先 使用泛型前綴語法(Foo<T>)爲後綴的語法(T Foo),有四個顯着的例外(listoptionarrayref)。

F#繼承了後綴ML風格的命名 泛型類型,例如, 「int list」以及前綴.NET風格,例如 「list<int>」。你應該更喜歡.NET風格,除了四個 特定類型。對於F#列表,使用後綴形式:「int list」 而不是「list<int>」。對於選項,請使用後綴表格:「int option」 而不是「option<int>」。對於數組,請使用句法名稱 「int[]」而不是「int array」或「array<int>」。對於refs, 使用「int ref」而不是「ref<int>」或「Ref<int>」。對於所有其他類型的 ,使用前綴形式:「HashSet<int>」,「Dictionary<string,int>」, 因爲這符合.NET標準

此外,你如果使用ML-風格一般得到一個編譯器警告參數列表符號,例如('a,'b) tt<'a,'b>

雖然我們在這,注意以下幾點建議在同一引導Section 3.1

不要在公共API使用PascalCase的泛型參數名稱, 包括F#-facing庫。特別是,對於任意通用參數,使用T,U, 這樣的名稱,並且當特定名稱使得 有意義時,則對於面向F#的庫,使用諸如Key,Value,Arg (但不包括例如TKey)的名稱。

(雖然我個人傾向於忽視F#面向公共圖書館的這一建議)。

3

沒有什麼區別,不知道這是否值得一個完整的答案!我更喜歡前者,尤其是涉及多種類型參數時(後者有可能)。

+1

是的,你在OCaml中執行'(string,float)Hashtbl.t'。 – 2012-04-16 17:59:48

1

我想說的區別是可讀性。對於一個參數,'語法不會過度混淆,但是當您獲取它們的列表時,讀取尖括號版本將變得更加容易。

2

我認爲'a t語法是更慣用的(它是在幾乎所有的MSDN實施例中使用和發射由編譯器將生成語法簽名文件)

沒有爲陣列一個類似的例子

int[] , int array 

'a t語法也是混凝土參數更好 -

int list, List<int> 

所以一些一致性主張'a t

相關問題